diff --git a/.travis.yml b/.travis.yml
index d6fcc4a88..2468ed60a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,145 @@
+dist: trusty
sudo: false
-
language: python
-python:
- - 2.7
- - 3.3
- - 3.4
- - 3.5
- - 3.6
- - 3.7-dev
-
+
matrix:
- allow_failures:
- - python: 3.7-dev
+ include:
+ - python: 2.7
+ env:
+ - BUILD_OPTS=--xplat
+ - NUNIT_PATH=~/.nuget/packages/nunit.consolerunner/3.*/tools/nunit3-console.exe
+ addons:
+ apt:
+ sources:
+ - sourceline: deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main
+ key_url: https://packages.microsoft.com/keys/microsoft.asc
+ - sourceline: deb http://download.mono-project.com/repo/ubuntu trusty main
+ key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF
+ packages:
+ - mono-devel
+ - ca-certificates-mono
+ - dotnet-hostfxr-2.0.0
+ - dotnet-runtime-2.0.0
+ - dotnet-sdk-2.0.0
+ - python: 3.3
+ env:
+ - BUILD_OPTS=--xplat
+ - NUNIT_PATH=~/.nuget/packages/nunit.consolerunner/3.*/tools/nunit3-console.exe
+ addons:
+ apt:
+ sources:
+ - sourceline: deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main
+ key_url: https://packages.microsoft.com/keys/microsoft.asc
+ - sourceline: deb http://download.mono-project.com/repo/ubuntu trusty main
+ key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF
+ packages:
+ - mono-devel
+ - ca-certificates-mono
+ - dotnet-hostfxr-2.0.0
+ - dotnet-runtime-2.0.0
+ - dotnet-sdk-2.0.0
+ - python: 3.4
+ env:
+ - BUILD_OPTS=--xplat
+ - NUNIT_PATH=~/.nuget/packages/nunit.consolerunner/3.*/tools/nunit3-console.exe
+ addons:
+ apt:
+ sources:
+ - sourceline: deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main
+ key_url: https://packages.microsoft.com/keys/microsoft.asc
+ - sourceline: deb http://download.mono-project.com/repo/ubuntu trusty main
+ key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF
+ packages:
+ - mono-devel
+ - ca-certificates-mono
+ - dotnet-hostfxr-2.0.0
+ - dotnet-runtime-2.0.0
+ - dotnet-sdk-2.0.0
+ - python: 3.5
+ env:
+ - BUILD_OPTS=--xplat
+ - NUNIT_PATH=~/.nuget/packages/nunit.consolerunner/3.*/tools/nunit3-console.exe
+ addons:
+ apt:
+ sources:
+ - sourceline: deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main
+ key_url: https://packages.microsoft.com/keys/microsoft.asc
+ - sourceline: deb http://download.mono-project.com/repo/ubuntu trusty main
+ key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF
+ packages:
+ - mono-devel
+ - ca-certificates-mono
+ - dotnet-hostfxr-2.0.0
+ - dotnet-runtime-2.0.0
+ - dotnet-sdk-2.0.0
+ - python: 3.6
+ env:
+ - BUILD_OPTS=--xplat
+ - NUNIT_PATH=~/.nuget/packages/nunit.consolerunner/3.*/tools/nunit3-console.exe
+ addons:
+ apt:
+ sources:
+ - sourceline: deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main
+ key_url: https://packages.microsoft.com/keys/microsoft.asc
+ - sourceline: deb http://download.mono-project.com/repo/ubuntu trusty main
+ key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF
+ packages:
+ - mono-devel
+ - ca-certificates-mono
+ - dotnet-hostfxr-2.0.0
+ - dotnet-runtime-2.0.0
+ - dotnet-sdk-2.0.0
+ - python: "3.7-dev"
+ env:
+ - BUILD_OPTS=--xplat
+ - NUNIT_PATH=~/.nuget/packages/nunit.consolerunner/3.*/tools/nunit3-console.exe
+ addons:
+ apt:
+ sources:
+ - sourceline: deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main
+ key_url: https://packages.microsoft.com/keys/microsoft.asc
+ - sourceline: deb http://download.mono-project.com/repo/ubuntu trusty main
+ key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF
+ packages:
+ - mono-devel
+ - ca-certificates-mono
+ - dotnet-hostfxr-2.0.0
+ - dotnet-runtime-2.0.0
+ - dotnet-sdk-2.0.0
+ - python: 2.7
+ env:
+ - BUILD_OPTS=
+ - NUNIT_PATH=./packages/NUnit.*/tools/nunit3-console.exe
+ - python: 3.3
+ env:
+ - BUILD_OPTS=
+ - NUNIT_PATH=./packages/NUnit.*/tools/nunit3-console.exe
+ - python: 3.4
+ env:
+ - BUILD_OPTS=
+ - NUNIT_PATH=./packages/NUnit.*/tools/nunit3-console.exe
+ - python: 3.5
+ env:
+ - BUILD_OPTS=
+ - NUNIT_PATH=./packages/NUnit.*/tools/nunit3-console.exe
+ - python: 3.6
+ env:
+ - BUILD_OPTS=
+ - NUNIT_PATH=./packages/NUnit.*/tools/nunit3-console.exe
+ - python: "3.7-dev"
+ env:
+ - BUILD_OPTS=
+ - NUNIT_PATH=./packages/NUnit.*/tools/nunit3-console.exe
+ allow_failures:
+ - python: "3.7-dev"
+ env:
+ - BUILD_OPTS=
+ - NUNIT_PATH=./packages/NUnit.*/tools/nunit3-console.exe
+ - python: "3.7-dev"
+ env:
+ - BUILD_OPTS=--xplat
+ - NUNIT_PATH=~/.nuget/packages/nunit.consolerunner/3.*/tools/nunit3-console.exe
env:
global:
- LD_PRELOAD=/lib/x86_64-linux-gnu/libSegFault.so
@@ -23,8 +150,8 @@ env:
addons:
apt:
sources:
- - mono
- - mono-libtiff-compat
+ - sourceline: deb http://download.mono-project.com/repo/ubuntu trusty main
+ key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF
packages:
- mono-devel
- ca-certificates-mono
@@ -37,11 +164,11 @@ before_install:
install:
- pip install --upgrade setuptools # TEMP - due to setuptools 36.2.0 bug
- pip install --upgrade -r requirements.txt
- - coverage run setup.py install
+ - coverage run setup.py install $BUILD_OPTS
script:
- python -m pytest
- - mono ./packages/NUnit.*/tools/nunit3-console.exe src/embed_tests/bin/Python.EmbeddingTest.dll
+ - mono $NUNIT_PATH src/embed_tests/bin/Python.EmbeddingTest.dll
after_script:
# Uncomment if need to geninterop, ie. py37 final
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5ae62d692..e5929107b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,10 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
## [unreleased][]
### Added
+- Added new build system (pythonnet.15.sln) based on dotnetcore-sdk/xplat(crossplatform msbuild).
+ Currently there two side-by-side build systems that produces the same output (net40) from the same sources.
+ After a some transition time, current (mono/ msbuild 14.0) build system will be removed.
+- NUnit upgraded to 3.7 (eliminates travis-ci random bug)
- Added `clr.GetClrType` (#432, #433)
- Allowed passing `None` for nullable args (#460)
- Added keyword arguments based on C# syntax for calling CPython methods (#461)
diff --git a/NuGet.config b/NuGet.config
new file mode 100644
index 000000000..719fbc83c
--- /dev/null
+++ b/NuGet.config
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
index 2f1103f5a..c7c3a7810 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,6 +1,9 @@
version: '{branch}-{build}'
build: off
+image:
+ - Visual Studio 2017
+
platform:
- x86
- x64
@@ -12,6 +15,16 @@ environment:
CODECOV_ENV: PYTHON_VERSION, PLATFORM
matrix:
+ - PYTHON_VERSION: 2.7
+ BUILD_OPTS: --xplat
+ - PYTHON_VERSION: 3.3
+ BUILD_OPTS: --xplat
+ - PYTHON_VERSION: 3.4
+ BUILD_OPTS: --xplat
+ - PYTHON_VERSION: 3.5
+ BUILD_OPTS: --xplat
+ - PYTHON_VERSION: 3.6
+ BUILD_OPTS: --xplat
- PYTHON_VERSION: 2.7
- PYTHON_VERSION: 3.3
- PYTHON_VERSION: 3.4
@@ -29,6 +42,7 @@ init:
install:
- pip install --upgrade -r requirements.txt --quiet
+ - choco install vswhere -y
# Install OpenCover. Can't put on `packages.config`, not Mono compatible
- .\tools\nuget\nuget.exe install OpenCover -OutputDirectory packages -Verbosity quiet
@@ -37,7 +51,7 @@ build_script:
# Create clean `sdist`. Only used for releases
- python setup.py --quiet sdist
# Build `wheel` with coverage of `setup.py`
- - coverage run setup.py bdist_wheel
+ - coverage run setup.py bdist_wheel %BUILD_OPTS%
test_script:
- pip install --no-index --find-links=.\dist\ pythonnet
diff --git a/ci/appveyor_run_tests.ps1 b/ci/appveyor_run_tests.ps1
index 4245d1577..2821cf915 100644
--- a/ci/appveyor_run_tests.ps1
+++ b/ci/appveyor_run_tests.ps1
@@ -11,7 +11,12 @@ if ($FALSE -and $env:PLATFORM -eq "x86"){
# Executable paths for OpenCover
# Note if OpenCover fails, it won't affect the exit codes.
$OPENCOVER = Resolve-Path .\packages\OpenCover.*\tools\OpenCover.Console.exe
-$CS_RUNNER = Resolve-Path .\packages\NUnit.*\tools\"$CS_RUNNER".exe
+if ($env:BUILD_OPTS -eq "--xplat"){
+ $CS_RUNNER = Resolve-Path $env:USERPROFILE\.nuget\packages\nunit.consolerunner\*\tools\"$CS_RUNNER".exe
+}
+else{
+ $CS_RUNNER = Resolve-Path .\packages\NUnit.*\tools\"$CS_RUNNER".exe
+}
$PY = Get-Command python
# Can't use ".\build\*\Python.EmbeddingTest.dll". Missing framework files.
diff --git a/pythonnet.15.sln b/pythonnet.15.sln
new file mode 100644
index 000000000..121631e43
--- /dev/null
+++ b/pythonnet.15.sln
@@ -0,0 +1,194 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26730.3
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Python.Runtime.15", "src\runtime\Python.Runtime.15.csproj", "{2759F4FF-716B-4828-916F-50FA86613DFC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Python.EmbeddingTest.15", "src\embed_tests\Python.EmbeddingTest.15.csproj", "{66B8D01A-9906-452A-B09E-BF75EA76468F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "clrmodule.15", "src\clrmodule\clrmodule.15.csproj", "{E08678D4-9A52-4AD5-B63D-8EBC7399981B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Console.15", "src\console\Console.15.csproj", "{CDAD305F-8E72-492C-A314-64CF58D472A0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Python.Test.15", "src\testing\Python.Test.15.csproj", "{F94B547A-E97E-4500-8D53-B4D64D076E5F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ DebugMono|x64 = DebugMono|x64
+ DebugMono|x86 = DebugMono|x86
+ DebugMonoPY3|x64 = DebugMonoPY3|x64
+ DebugMonoPY3|x86 = DebugMonoPY3|x86
+ DebugWin|x64 = DebugWin|x64
+ DebugWin|x86 = DebugWin|x86
+ DebugWinPY3|x64 = DebugWinPY3|x64
+ DebugWinPY3|x86 = DebugWinPY3|x86
+ ReleaseMono|x64 = ReleaseMono|x64
+ ReleaseMono|x86 = ReleaseMono|x86
+ ReleaseMonoPY3|x64 = ReleaseMonoPY3|x64
+ ReleaseMonoPY3|x86 = ReleaseMonoPY3|x86
+ ReleaseWin|x64 = ReleaseWin|x64
+ ReleaseWin|x86 = ReleaseWin|x86
+ ReleaseWinPY3|x64 = ReleaseWinPY3|x64
+ ReleaseWinPY3|x86 = ReleaseWinPY3|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMono|x64.ActiveCfg = DebugMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMono|x64.Build.0 = DebugMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMono|x86.ActiveCfg = DebugMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMono|x86.Build.0 = DebugMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMonoPY3|x64.ActiveCfg = DebugMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMonoPY3|x64.Build.0 = DebugMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMonoPY3|x86.ActiveCfg = DebugMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugMonoPY3|x86.Build.0 = DebugMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWin|x64.Build.0 = DebugWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWin|x86.Build.0 = DebugWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWinPY3|x64.ActiveCfg = DebugWinPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWinPY3|x64.Build.0 = DebugWinPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWinPY3|x86.ActiveCfg = DebugWinPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.DebugWinPY3|x86.Build.0 = DebugWinPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMono|x64.ActiveCfg = ReleaseMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMono|x64.Build.0 = ReleaseMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMono|x86.ActiveCfg = ReleaseMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMono|x86.Build.0 = ReleaseMono|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMonoPY3|x64.ActiveCfg = ReleaseMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMonoPY3|x64.Build.0 = ReleaseMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMonoPY3|x86.ActiveCfg = ReleaseMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseMonoPY3|x86.Build.0 = ReleaseMonoPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWinPY3|x64.ActiveCfg = ReleaseWinPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWinPY3|x64.Build.0 = ReleaseWinPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWinPY3|x86.ActiveCfg = ReleaseWinPY3|Any CPU
+ {2759F4FF-716B-4828-916F-50FA86613DFC}.ReleaseWinPY3|x86.Build.0 = ReleaseWinPY3|Any CPU
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMono|x64.ActiveCfg = DebugMono|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMono|x64.Build.0 = DebugMono|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMono|x86.ActiveCfg = DebugMono|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMono|x86.Build.0 = DebugMono|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMonoPY3|x64.ActiveCfg = DebugMonoPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMonoPY3|x64.Build.0 = DebugMonoPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMonoPY3|x86.ActiveCfg = DebugMonoPY3|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugMonoPY3|x86.Build.0 = DebugMonoPY3|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWin|x64.ActiveCfg = DebugWin|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWin|x64.Build.0 = DebugWin|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWin|x86.ActiveCfg = DebugWin|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWin|x86.Build.0 = DebugWin|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWinPY3|x64.ActiveCfg = DebugWinPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWinPY3|x64.Build.0 = DebugWinPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWinPY3|x86.ActiveCfg = DebugWinPY3|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.DebugWinPY3|x86.Build.0 = DebugWinPY3|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMono|x64.ActiveCfg = ReleaseMono|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMono|x64.Build.0 = ReleaseMono|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMono|x86.ActiveCfg = ReleaseMono|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMono|x86.Build.0 = ReleaseMono|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMonoPY3|x64.ActiveCfg = ReleaseMonoPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMonoPY3|x64.Build.0 = ReleaseMonoPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMonoPY3|x86.ActiveCfg = ReleaseMonoPY3|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseMonoPY3|x86.Build.0 = ReleaseMonoPY3|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWin|x64.Build.0 = ReleaseWin|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWin|x86.Build.0 = ReleaseWin|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWinPY3|x64.ActiveCfg = ReleaseWinPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWinPY3|x64.Build.0 = ReleaseWinPY3|x64
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWinPY3|x86.ActiveCfg = ReleaseWinPY3|x86
+ {66B8D01A-9906-452A-B09E-BF75EA76468F}.ReleaseWinPY3|x86.Build.0 = ReleaseWinPY3|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugMono|x64.ActiveCfg = DebugMono|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugMono|x86.ActiveCfg = DebugMono|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugMonoPY3|x64.ActiveCfg = DebugMonoPY3|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugMonoPY3|x86.ActiveCfg = DebugMonoPY3|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWin|x64.ActiveCfg = DebugWin|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWin|x64.Build.0 = DebugWin|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWin|x86.ActiveCfg = DebugWin|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWin|x86.Build.0 = DebugWin|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWinPY3|x64.ActiveCfg = DebugWinPY3|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWinPY3|x64.Build.0 = DebugWinPY3|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWinPY3|x86.ActiveCfg = DebugWinPY3|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.DebugWinPY3|x86.Build.0 = DebugWinPY3|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseMono|x64.ActiveCfg = ReleaseMono|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseMono|x86.ActiveCfg = ReleaseMono|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseMonoPY3|x64.ActiveCfg = ReleaseMonoPY3|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseMonoPY3|x86.ActiveCfg = ReleaseMonoPY3|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWin|x64.Build.0 = ReleaseWin|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWin|x86.Build.0 = ReleaseWin|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWinPY3|x64.ActiveCfg = ReleaseWinPY3|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWinPY3|x64.Build.0 = ReleaseWinPY3|x64
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWinPY3|x86.ActiveCfg = ReleaseWinPY3|x86
+ {E08678D4-9A52-4AD5-B63D-8EBC7399981B}.ReleaseWinPY3|x86.Build.0 = ReleaseWinPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMono|x64.ActiveCfg = DebugMono|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMono|x64.Build.0 = DebugMono|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMono|x86.ActiveCfg = DebugMono|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMono|x86.Build.0 = DebugMono|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMonoPY3|x64.ActiveCfg = DebugMonoPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMonoPY3|x64.Build.0 = DebugMonoPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMonoPY3|x86.ActiveCfg = DebugMonoPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugMonoPY3|x86.Build.0 = DebugMonoPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWin|x64.ActiveCfg = DebugWin|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWin|x64.Build.0 = DebugWin|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWin|x86.ActiveCfg = DebugWin|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWin|x86.Build.0 = DebugWin|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWinPY3|x64.ActiveCfg = DebugWinPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWinPY3|x64.Build.0 = DebugWinPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWinPY3|x86.ActiveCfg = DebugWinPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.DebugWinPY3|x86.Build.0 = DebugWinPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMono|x64.ActiveCfg = ReleaseMono|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMono|x64.Build.0 = ReleaseMono|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMono|x86.ActiveCfg = ReleaseMono|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMono|x86.Build.0 = ReleaseMono|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMonoPY3|x64.ActiveCfg = ReleaseMonoPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMonoPY3|x64.Build.0 = ReleaseMonoPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMonoPY3|x86.ActiveCfg = ReleaseMonoPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseMonoPY3|x86.Build.0 = ReleaseMonoPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWin|x64.Build.0 = ReleaseWin|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWin|x86.Build.0 = ReleaseWin|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWinPY3|x64.ActiveCfg = ReleaseWinPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWinPY3|x64.Build.0 = ReleaseWinPY3|x64
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWinPY3|x86.ActiveCfg = ReleaseWinPY3|x86
+ {CDAD305F-8E72-492C-A314-64CF58D472A0}.ReleaseWinPY3|x86.Build.0 = ReleaseWinPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMono|x64.ActiveCfg = DebugMono|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMono|x64.Build.0 = DebugMono|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMono|x86.ActiveCfg = DebugMono|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMono|x86.Build.0 = DebugMono|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMonoPY3|x64.ActiveCfg = DebugMonoPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMonoPY3|x64.Build.0 = DebugMonoPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMonoPY3|x86.ActiveCfg = DebugMonoPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugMonoPY3|x86.Build.0 = DebugMonoPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWin|x64.ActiveCfg = DebugWin|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWin|x64.Build.0 = DebugWin|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWin|x86.ActiveCfg = DebugWin|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWin|x86.Build.0 = DebugWin|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWinPY3|x64.ActiveCfg = DebugWinPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWinPY3|x64.Build.0 = DebugWinPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWinPY3|x86.ActiveCfg = DebugWinPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.DebugWinPY3|x86.Build.0 = DebugWinPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMono|x64.ActiveCfg = ReleaseMono|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMono|x64.Build.0 = ReleaseMono|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMono|x86.ActiveCfg = ReleaseMono|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMono|x86.Build.0 = ReleaseMono|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMonoPY3|x64.ActiveCfg = ReleaseMonoPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMonoPY3|x64.Build.0 = ReleaseMonoPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMonoPY3|x86.ActiveCfg = ReleaseMonoPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseMonoPY3|x86.Build.0 = ReleaseMonoPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWin|x64.Build.0 = ReleaseWin|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWin|x86.Build.0 = ReleaseWin|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWinPY3|x64.ActiveCfg = ReleaseWinPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWinPY3|x64.Build.0 = ReleaseWinPY3|x64
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWinPY3|x86.ActiveCfg = ReleaseWinPY3|x86
+ {F94B547A-E97E-4500-8D53-B4D64D076E5F}.ReleaseWinPY3|x86.Build.0 = ReleaseWinPY3|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A6347B90-BBE6-4E45-90BF-1BD8B76069E3}
+ EndGlobalSection
+EndGlobal
diff --git a/setup.py b/setup.py
index c23f6b5bd..6cfd773a6 100644
--- a/setup.py
+++ b/setup.py
@@ -14,7 +14,8 @@
import sys
import sysconfig
from distutils import spawn
-from distutils.command import build_ext, install_data, install_lib
+from distutils.command import install, build, build_ext, install_data, install_lib
+from wheel import bdist_wheel
from setuptools import Extension, setup
@@ -131,9 +132,28 @@ def _get_long_description():
except ImportError:
return '.Net and Mono integration for Python'
+def _update_xlat_devtools():
+ global DEVTOOLS
+ if DEVTOOLS == "MsDev":
+ DEVTOOLS = "MsDev15"
+ elif DEVTOOLS == "Mono":
+ DEVTOOLS = "dotnet"
class BuildExtPythonnet(build_ext.build_ext):
+ user_options = build_ext.build_ext.user_options + [
+ ('xplat', None, None)
+ ]
+ def initialize_options(self):
+ build_ext.build_ext.initialize_options(self)
+ self.xplat = None
+
+ def finalize_options(self):
+ build_ext.build_ext.finalize_options(self)
+
def build_extension(self, ext):
+ if self.xplat:
+ _update_xlat_devtools()
+
"""Builds the .pyd file using msbuild or xbuild"""
if ext.name != "clr":
return build_ext.build_ext.build_extension(self, ext)
@@ -164,7 +184,7 @@ def build_extension(self, ext):
if CONFIG == "Debug":
defines.extend(["DEBUG", "TRACE"])
- if sys.platform != "win32" and DEVTOOLS == "Mono":
+ if sys.platform != "win32" and (DEVTOOLS == "Mono" or DEVTOOLS == "dotnet"):
on_darwin = sys.platform == "darwin"
defines.append("MONO_OSX" if on_darwin else "MONO_LINUX")
@@ -196,20 +216,33 @@ def build_extension(self, ext):
if DEVTOOLS == "MsDev":
_xbuild = '"{0}"'.format(self._find_msbuild_tool("msbuild.exe"))
_config = "{0}Win".format(CONFIG)
-
+ _solution_file = 'pythonnet.sln'
+ _custom_define_constants = False
+ elif DEVTOOLS == "MsDev15":
+ _xbuild = '"{0}"'.format(self._find_msbuild_tool_15())
+ _config = "{0}Win".format(CONFIG)
+ _solution_file = 'pythonnet.15.sln'
+ _custom_define_constants = True
elif DEVTOOLS == "Mono":
- _xbuild = "xbuild"
+ _xbuild = 'xbuild'
_config = "{0}Mono".format(CONFIG)
+ _solution_file = 'pythonnet.sln'
+ _custom_define_constants = False
+ elif DEVTOOLS == "dotnet":
+ _xbuild = 'dotnet msbuild'
+ _config = "{0}Mono".format(CONFIG)
+ _solution_file = 'pythonnet.15.sln'
+ _custom_define_constants = True
else:
raise NotImplementedError(
- "DevTool {0} not supported (use MsDev/Mono)".format(DEVTOOLS))
+ "DevTool {0} not supported (use MsDev/MsDev15/Mono/dotnet)".format(DEVTOOLS))
cmd = [
_xbuild,
- 'pythonnet.sln',
+ _solution_file,
'/p:Configuration={}'.format(_config),
'/p:Platform={}'.format(ARCH),
- '/p:DefineConstants="{}"'.format('%3B'.join(defines)),
+ '/p:{}DefineConstants="{}"'.format('Custom' if _custom_define_constants else '','%3B'.join(defines)),
'/p:PythonBuildDir="{}"'.format(os.path.abspath(dest_dir)),
'/p:PythonInteropFile="{}"'.format(os.path.basename(interop_file)),
'/verbosity:{}'.format(VERBOSITY),
@@ -220,15 +253,16 @@ def build_extension(self, ext):
cmd.append('/p:PythonManifest="{0}"'.format(manifest))
self.debug_print("Building: {0}".format(" ".join(cmd)))
- use_shell = True if DEVTOOLS == "Mono" else False
+ use_shell = True if DEVTOOLS == "Mono" or DEVTOOLS == "dotnet" else False
+
subprocess.check_call(" ".join(cmd + ["/t:Clean"]), shell=use_shell)
subprocess.check_call(" ".join(cmd + ["/t:Build"]), shell=use_shell)
- if DEVTOOLS == "Mono":
+ if DEVTOOLS == "Mono" or DEVTOOLS == "dotnet":
self._build_monoclr()
def _get_manifest(self, build_dir):
- if DEVTOOLS != "MsDev":
+ if DEVTOOLS != "MsDev" and DEVTOOLS != "MsDev15":
return
mt = self._find_msbuild_tool("mt.exe", use_windows_sdk=True)
manifest = os.path.abspath(os.path.join(build_dir, "app.manifest"))
@@ -261,19 +295,30 @@ def _build_monoclr(self):
def _install_packages(self):
"""install packages using nuget"""
- nuget = os.path.join("tools", "nuget", "nuget.exe")
- use_shell = False
- if DEVTOOLS == "Mono":
- nuget = "mono {0}".format(nuget)
- use_shell = True
+ use_shell = DEVTOOLS == "Mono" or DEVTOOLS == "dotnet"
+
+ if DEVTOOLS == "MsDev15" or DEVTOOLS == "dotnet":
+ if DEVTOOLS == "MsDev15":
+ _config = "{0}Win".format(CONFIG)
+ elif DEVTOOLS == "dotnet":
+ _config = "{0}Mono".format(CONFIG)
+
+ cmd = "dotnet msbuild /t:Restore pythonnet.15.sln /p:Configuration={0} /p:Platform={1}".format(_config, ARCH)
+ self.debug_print("Updating packages with xplat: {0}".format(cmd))
+ subprocess.check_call(cmd, shell=use_shell)
+ else:
+ nuget = os.path.join("tools", "nuget", "nuget.exe")
+
+ if DEVTOOLS == "Mono":
+ nuget = "mono {0}".format(nuget)
- cmd = "{0} update -self".format(nuget)
- self.debug_print("Updating NuGet: {0}".format(cmd))
- subprocess.check_call(cmd, shell=use_shell)
+ cmd = "{0} update -self".format(nuget)
+ self.debug_print("Updating NuGet: {0}".format(cmd))
+ subprocess.check_call(cmd, shell=use_shell)
- cmd = "{0} restore pythonnet.sln -o packages".format(nuget)
- self.debug_print("Installing packages: {0}".format(cmd))
- subprocess.check_call(cmd, shell=use_shell)
+ cmd = "{0} restore pythonnet.sln -o packages".format(nuget)
+ self.debug_print("Installing packages: {0}".format(cmd))
+ subprocess.check_call(cmd, shell=use_shell)
def _find_msbuild_tool(self, tool="msbuild.exe", use_windows_sdk=False):
"""Return full path to one of the Microsoft build tools"""
@@ -319,6 +364,20 @@ def _find_msbuild_tool(self, tool="msbuild.exe", use_windows_sdk=False):
raise RuntimeError("{0} could not be found".format(tool))
+ def _find_msbuild_tool_15(self):
+ """Return full path to one of the Microsoft build tools"""
+ try:
+ basePathes = subprocess.check_output(
+ ["vswhere", "-latest",
+ "-version", "[15.0, 16.0)",
+ "-requires", "Microsoft.Component.MSBuild",
+ "-property", "InstallationPath"]).splitlines()
+ if len(basePathes):
+ return os.path.join(basePathes[0].decode(sys.stdout.encoding or "utf-8"), "MSBuild", "15.0", "Bin", "MSBuild.exe")
+ else:
+ raise RuntimeError("MSBuild >=15.0 could not be found.")
+ except subprocess.CalledProcessError as e:
+ raise RuntimeError("MSBuild >=15.0 could not be found. {0}".format(e.output))
class InstallLibPythonnet(install_lib.install_lib):
def install(self):
@@ -356,8 +415,39 @@ def run(self):
return install_data.install_data.run(self)
+class InstallPythonnet(install.install):
+ user_options = install.install.user_options + [
+ ('xplat', None, None)
+ ]
+ def initialize_options(self):
+ install.install.initialize_options(self)
+ self.xplat = None
+
+ def finalize_options(self):
+ install.install.finalize_options(self)
-###############################################################################
+ def run(self):
+ if self.xplat:
+ _update_xlat_devtools()
+ return install.install.run(self)
+
+class BDistWheelPythonnet(bdist_wheel.bdist_wheel):
+ user_options = bdist_wheel.bdist_wheel.user_options + [
+ ('xplat', None, None)
+ ]
+ def initialize_options(self):
+ bdist_wheel.bdist_wheel.initialize_options(self)
+ self.xplat = None
+
+ def finalize_options(self):
+ bdist_wheel.bdist_wheel.finalize_options(self)
+
+ def run(self):
+ if self.xplat:
+ _update_xlat_devtools()
+ return bdist_wheel.bdist_wheel.run(self)
+
+ ###############################################################################
setupdir = os.path.dirname(__file__)
if setupdir:
os.chdir(setupdir)
@@ -385,9 +475,11 @@ def run(self):
]),
],
cmdclass={
+ "install": InstallPythonnet,
"build_ext": BuildExtPythonnet,
"install_lib": InstallLibPythonnet,
"install_data": InstallDataPythonnet,
+ "bdist_wheel": BDistWheelPythonnet
},
classifiers=[
'Development Status :: 5 - Production/Stable',
diff --git a/src/clrmodule/clrmodule.15.csproj b/src/clrmodule/clrmodule.15.csproj
new file mode 100644
index 000000000..4d8a1b8ff
--- /dev/null
+++ b/src/clrmodule/clrmodule.15.csproj
@@ -0,0 +1,101 @@
+
+
+
+
+
+ net40
+ x64;x86
+ DebugMono;DebugMonoPY3;ReleaseMono;ReleaseMonoPY3;DebugWin;DebugWinPY3;ReleaseWin;ReleaseWinPY3
+ clrmodule
+ clrmodule
+ clrmodule
+ 2.4.0
+ false
+ false
+ false
+ false
+ false
+ false
+ bin\clrmodule.xml
+ bin\
+ false
+ 1591
+ ..\..\
+ $(SolutionDir)\bin\
+ 6
+ prompt
+ $(PYTHONNET_DEFINE_CONSTANTS)
+ XPLAT
+ $(DefineConstants);$(CustomDefineConstants);$(BaseDefineConstants);
+ $(DefineConstants);TRACE;DEBUG
+
+
+
+ x86
+
+
+ x64
+
+
+
+ true
+ $(DefineConstants);PYTHON2;TRACE;DEBUG
+ full
+
+
+ $(DefineConstants);PYTHON2
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);PYTHON2;TRACE;DEBUG
+ full
+
+
+ $(DefineConstants);PYTHON2
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);PYTHON3;TRACE;DEBUG
+ full
+
+
+ $(DefineConstants);PYTHON3
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);PYTHON3;TRACE;DEBUG
+ full
+
+
+ $(DefineConstants);PYTHON3
+ true
+ pdbonly
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(TargetPath)
+ $(TargetDir)$(TargetName).pdb
+
+
+
+
+
+
+
+
diff --git a/src/console/Console.15.csproj b/src/console/Console.15.csproj
new file mode 100644
index 000000000..0c89fce40
--- /dev/null
+++ b/src/console/Console.15.csproj
@@ -0,0 +1,105 @@
+
+
+
+ net40
+ x64;x86
+ DebugMono;DebugMonoPY3;ReleaseMono;ReleaseMonoPY3;DebugWin;DebugWinPY3;ReleaseWin;ReleaseWinPY3
+ Exe
+ nPython
+ Python.Runtime
+ nPython
+ 2.4.0
+ false
+ false
+ false
+ false
+ false
+ false
+ bin\nPython.xml
+ bin\
+ false
+ 1591
+ ..\..\
+ $(SolutionDir)\bin\
+ 6
+ python-clear.ico
+ prompt
+ $(PYTHONNET_DEFINE_CONSTANTS)
+ XPLAT
+ $(DefineConstants);$(CustomDefineConstants);$(BaseDefineConstants);
+ $(DefineConstants);TRACE;DEBUG
+ $(NuGetPackageRoot)\microsoft.targetingpack.netframework.v4.5\1.0.1\lib\net45\
+
+
+ x86
+
+
+ x64
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+ $(PythonManifest)
+
+
+
+
+
+
+ Properties\SharedAssemblyInfo.cs
+
+
+
+
+
+ Python.Runtime.dll
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/embed_tests/Python.EmbeddingTest.15.csproj b/src/embed_tests/Python.EmbeddingTest.15.csproj
new file mode 100644
index 000000000..ac6ecba92
--- /dev/null
+++ b/src/embed_tests/Python.EmbeddingTest.15.csproj
@@ -0,0 +1,121 @@
+
+
+
+
+ net40
+ x64;x86
+ DebugMono;DebugMonoPY3;ReleaseMono;ReleaseMonoPY3;DebugWin;DebugWinPY3;ReleaseWin;ReleaseWinPY3
+ net45
+ Python.EmbeddingTest
+ Python.EmbeddingTest
+ Python.EmbeddingTest
+ 2.4.0
+ false
+ false
+ false
+ false
+ bin\
+ false
+ $(OutputPath)\$(AssemblyName).xml
+ 1591
+ ..\..\
+ $(SolutionDir)\bin\
+ 6
+ prompt
+ $(PYTHONNET_DEFINE_CONSTANTS)
+ XPLAT
+ $(DefineConstants);$(CustomDefineConstants);$(BaseDefineConstants);
+ $(DefineConstants);TRACE;DEBUG
+ $(NuGetPackageRoot)\microsoft.targetingpack.netframework.v4.5\1.0.1\lib\net45\
+
+
+ x86
+
+
+ x64
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants);
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants);
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants);
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants);
+ true
+ pdbonly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(TargetPath)
+ $(TargetDir)$(TargetName).pdb
+
+
+
+
+
+
+
+
diff --git a/src/embed_tests/Python.EmbeddingTest.csproj b/src/embed_tests/Python.EmbeddingTest.csproj
index d45c622f9..fe02b0526 100644
--- a/src/embed_tests/Python.EmbeddingTest.csproj
+++ b/src/embed_tests/Python.EmbeddingTest.csproj
@@ -70,8 +70,8 @@
-
- ..\..\packages\NUnit.3.6.0\lib\net40\nunit.framework.dll
+
+ ..\..\packages\NUnit.3.7.1\lib\net40\nunit.framework.dll
diff --git a/src/embed_tests/TestPythonEngineProperties.cs b/src/embed_tests/TestPythonEngineProperties.cs
index 76177d05a..01c6ae7e3 100644
--- a/src/embed_tests/TestPythonEngineProperties.cs
+++ b/src/embed_tests/TestPythonEngineProperties.cs
@@ -146,7 +146,7 @@ public void SetProgramName()
[Test]
public void SetPythonPath()
{
- if (Runtime.Runtime._pyversion == "2.7")
+ if (Runtime.Runtime.pyversion == "2.7")
{
// Assert.Skip outputs as a warning (ie. pending to fix)
Assert.Pass();
@@ -166,7 +166,7 @@ public void SetPythonPath()
[Test]
public void SetPythonPathExceptionOn27()
{
- if (Runtime.Runtime._pyversion != "2.7")
+ if (Runtime.Runtime.pyversion != "2.7")
{
Assert.Pass();
}
diff --git a/src/embed_tests/packages.config b/src/embed_tests/packages.config
index 4cb01d3be..8c175f441 100644
--- a/src/embed_tests/packages.config
+++ b/src/embed_tests/packages.config
@@ -1,5 +1,5 @@
-
-
+
+
diff --git a/src/runtime/Python.Runtime.15.csproj b/src/runtime/Python.Runtime.15.csproj
new file mode 100644
index 000000000..93bd143dc
--- /dev/null
+++ b/src/runtime/Python.Runtime.15.csproj
@@ -0,0 +1,133 @@
+
+
+
+ net40
+ AnyCPU
+ DebugMono;DebugMonoPY3;ReleaseMono;ReleaseMonoPY3;DebugWin;DebugWinPY3;ReleaseWin;ReleaseWinPY3
+ net45
+ Python.Runtime
+ Python.Runtime
+ Python.Runtime
+ 2.4.0
+ false
+ false
+ false
+ false
+ false
+ false
+ bin\
+ false
+ $(OutputPath)\$(AssemblyName).xml
+ 1591;NU1701
+ ..\..\
+ $(SolutionDir)\bin\
+ 6
+ True
+ ..\pythonnet.snk
+ $(PYTHONNET_DEFINE_CONSTANTS)
+ XPLAT
+ $(DefineConstants);$(CustomDefineConstants);$(BaseDefineConstants);
+ $(DefineConstants);TRACE;DEBUG
+ $(NuGetPackageRoot)\microsoft.targetingpack.netframework.v4.5\1.0.1\lib\net45\
+ $(PYTHONNET_PY2_VERSION)
+ PYTHON27
+ $(PYTHONNET_PY3_VERSION)
+ PYTHON36
+ $(PYTHONNET_WIN_DEFINE_CONSTANTS)
+ UCS2
+ $(PYTHONNET_MONO_DEFINE_CONSTANTS)
+ UCS4;MONO_LINUX;PYTHON_WITH_PYMALLOC
+
+
+
+ $(DefineConstants);PYTHON2;$(Python2Version);$(PythonMonoDefineConstants)
+ true
+ pdbonly
+
+
+ $(DefineConstants);PYTHON3;$(Python3Version);$(PythonMonoDefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);PYTHON2;$(Python2Version);$(PythonMonoDefineConstants);TRACE;DEBUG
+ false
+ full
+
+
+ true
+ $(DefineConstants);PYTHON3;$(Python3Version);$(PythonMonoDefineConstants);TRACE;DEBUG
+ false
+ full
+
+
+ $(DefineConstants);PYTHON2;$(Python2Version);$(PythonWinDefineConstants)
+ true
+ pdbonly
+
+
+ $(DefineConstants);PYTHON3;$(Python3Version);$(PythonWinDefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);PYTHON2;$(Python2Version);$(PythonWinDefineConstants);TRACE;DEBUG
+ false
+ full
+
+
+ true
+ $(DefineConstants);PYTHON3;$(Python3Version);$(PythonWinDefineConstants);TRACE;DEBUG
+ false
+ full
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ clr.py
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(TargetPath)
+ $(TargetDir)$(TargetName).pdb
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/runtime/runtime.cs b/src/runtime/runtime.cs
index 8f730a855..3949500e2 100644
--- a/src/runtime/runtime.cs
+++ b/src/runtime/runtime.cs
@@ -110,8 +110,8 @@ public class Runtime
// We needs to replace all public constants to static readonly fields to allow
// binary substitution of different Python.Runtime.dll builds in a target application.
- public string pyversion => _pyversion;
- public string pyver => _pyver;
+ public static string pyversion => _pyversion;
+ public static string pyver => _pyver;
#if PYTHON27
internal const string _pyversion = "2.7";
diff --git a/src/testing/Python.Test.15.csproj b/src/testing/Python.Test.15.csproj
new file mode 100644
index 000000000..635580854
--- /dev/null
+++ b/src/testing/Python.Test.15.csproj
@@ -0,0 +1,92 @@
+
+
+
+ net40
+ x64;x86
+ DebugMono;DebugMonoPY3;ReleaseMono;ReleaseMonoPY3;DebugWin;DebugWinPY3;ReleaseWin;ReleaseWinPY3
+ Python.Test
+ Python.Test
+ Python.Test
+ 2.4.0
+ bin\Python.Test.xml
+ bin\
+ false
+ 1591,0067
+ ..\..\
+ $(SolutionDir)\bin\
+ 6
+ false
+ ..\pythonnet.snk
+ prompt
+ $(PYTHONNET_DEFINE_CONSTANTS)
+ XPLAT
+ $(DefineConstants);$(CustomDefineConstants);$(BaseDefineConstants);
+ $(DefineConstants);TRACE;DEBUG
+ $(NuGetPackageRoot)\microsoft.targetingpack.netframework.v4.5\1.0.1\lib\net45\
+
+
+ x86
+
+
+ x64
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+ true
+ $(DefineConstants);DEBUG;TRACE
+ full
+
+
+ $(DefineConstants)
+ true
+ pdbonly
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(TargetPath)
+ $(TargetDir)$(TargetName).pdb
+
+
+
+
+
+