diff --git a/csharp/OnnxRuntime.CSharp.proj b/csharp/OnnxRuntime.CSharp.proj
index 01ed2eb326..a5058e9c07 100644
--- a/csharp/OnnxRuntime.CSharp.proj
+++ b/csharp/OnnxRuntime.CSharp.proj
@@ -138,5 +138,5 @@ CMake creates a target to this project
-
+
diff --git a/csharp/src/Microsoft.AI.MachineLearning.Interop/.gitignore b/csharp/src/Microsoft.AI.MachineLearning.Interop/.gitignore
new file mode 100644
index 0000000000..f128932de7
--- /dev/null
+++ b/csharp/src/Microsoft.AI.MachineLearning.Interop/.gitignore
@@ -0,0 +1 @@
+Generated Files
\ No newline at end of file
diff --git a/csharp/src/Microsoft.AI.MachineLearning.Interop/Microsoft.AI.MachineLearning.Interop.csproj b/csharp/src/Microsoft.AI.MachineLearning.Interop/Microsoft.AI.MachineLearning.Interop.csproj
new file mode 100644
index 0000000000..0eae08f67e
--- /dev/null
+++ b/csharp/src/Microsoft.AI.MachineLearning.Interop/Microsoft.AI.MachineLearning.Interop.csproj
@@ -0,0 +1,48 @@
+
+
+
+ Microsoft.AI.MachineLearning.Interop
+ netstandard2.0
+ true
+
+ Any CPU
+ Debug
+
+ ..\..\..\build\Windows
+ $(OnnxRuntimeBuildDirectory)\$(Configuration)\$(Configuration)
+ $(BuildOutputDir)\Microsoft.AI.MachineLearning.Interop
+ $(WindowsAIInteropOutputDir)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(CsWinRTPath)cswinrt.exe -verbose -in local -in @(WindowsAIsWinMDs->'"%(FullPath)"', ' ') -out "$(ProjectDir)Generated Files" -include Microsoft.AI.MachineLearning
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/src/Microsoft.AI.MachineLearning.Interop/Microsoft.AI.MachineLearning.targets b/csharp/src/Microsoft.AI.MachineLearning.Interop/Microsoft.AI.MachineLearning.targets
new file mode 100644
index 0000000000..0c38e34e04
--- /dev/null
+++ b/csharp/src/Microsoft.AI.MachineLearning.Interop/Microsoft.AI.MachineLearning.targets
@@ -0,0 +1,32 @@
+
+
+
+ x64
+ x86
+ $(PlatformTarget)
+
+
+
+ $(MSBuildThisFileDirectory)..\..\runtimes\win-$(WindowsAI-Platform)\native\Microsoft.AI.MachineLearning.dll
+ $(MSBuildThisFileDirectory)..\..\runtimes\win-$(WindowsAI-Platform)\native\onnxruntime.dll
+ $(MSBuildThisFileDirectory)..\..\runtimes\win-$(WindowsAI-Platform)\native\directml.dll
+
+
+
+ $(WindowsAIBinary);$(OnnxRuntimeBinary);$(DirectMLBinary)
+
+
+ $(WindowsAIBinary);$(OnnxRuntimeBinary);$(DirectMLBinary)
+
+
+ $(WindowsAIBinary);$(OnnxRuntimeBinary)
+
+
+
+
+ Binplacing WindowsAI binaries: {0} and {1}.
+
+
+
+
+
diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/Microsoft.AI.MachineLearning.Rules.Project.xml b/csharp/src/Microsoft.AI.MachineLearning/Microsoft.AI.MachineLearning.Rules.Project.xml
similarity index 100%
rename from csharp/src/Microsoft.ML.OnnxRuntime/Microsoft.AI.MachineLearning.Rules.Project.xml
rename to csharp/src/Microsoft.AI.MachineLearning/Microsoft.AI.MachineLearning.Rules.Project.xml
diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/Microsoft.AI.MachineLearning.props b/csharp/src/Microsoft.AI.MachineLearning/Microsoft.AI.MachineLearning.props
similarity index 100%
rename from csharp/src/Microsoft.ML.OnnxRuntime/Microsoft.AI.MachineLearning.props
rename to csharp/src/Microsoft.AI.MachineLearning/Microsoft.AI.MachineLearning.props
diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/Microsoft.AI.MachineLearning.targets b/csharp/src/Microsoft.AI.MachineLearning/Microsoft.AI.MachineLearning.targets
similarity index 100%
rename from csharp/src/Microsoft.ML.OnnxRuntime/Microsoft.AI.MachineLearning.targets
rename to csharp/src/Microsoft.AI.MachineLearning/Microsoft.AI.MachineLearning.targets
diff --git a/tools/ci_build/github/azure-pipelines/templates/windowsai-nuget-build.yml b/tools/ci_build/github/azure-pipelines/templates/windowsai-nuget-build.yml
index c96efd52c5..6a1d041f58 100644
--- a/tools/ci_build/github/azure-pipelines/templates/windowsai-nuget-build.yml
+++ b/tools/ci_build/github/azure-pipelines/templates/windowsai-nuget-build.yml
@@ -135,6 +135,10 @@ steps:
arguments: 'x64'
modifyEnvironment: true
+ - script: msbuild Microsoft.AI.MachineLearning.Interop.csproj /p:Configuration=RelWithDebInfo /p:Platform="Any CPU" /p:OnnxRuntimeBuildDirectory=$(Build.BinariesDirectory) -restore
+ workingDirectory: '$(Build.SourcesDirectory)\csharp\src\Microsoft.AI.MachineLearning.Interop'
+ displayName: 'Build Microsoft.AI.MachineLearning.Interop.dll'
+
# Esrp signing
- template: win-esrp-dll.yml
parameters:
diff --git a/tools/nuget/generate_nuspec_for_native_nuget.py b/tools/nuget/generate_nuspec_for_native_nuget.py
index dc52591343..7164db22d6 100644
--- a/tools/nuget/generate_nuspec_for_native_nuget.py
+++ b/tools/nuget/generate_nuspec_for_native_nuget.py
@@ -71,7 +71,24 @@ def generate_repo_url(list, repo_url, commit_id):
def generate_dependencies(list, package_name, version):
- if (package_name != 'Microsoft.AI.MachineLearning'):
+ if (package_name == 'Microsoft.AI.MachineLearning'):
+ list.append('')
+
+ # Support .Net Core
+ list.append('')
+ list.append('')
+ list.append('')
+ # Support .Net Standard
+ list.append('')
+ list.append('')
+ list.append('')
+ # Support .Net Framework
+ list.append('')
+ list.append('')
+ list.append('')
+
+ list.append('')
+ else:
list.append('')
# Support .Net Core
list.append('')
@@ -167,7 +184,6 @@ def generate_files(list, args):
'" target="build\\native\\include" />')
if includes_winml:
- mlop_path = 'onnxruntime\\core\\providers\\dml\\dmlexecutionprovider\\inc\\mloperatorauthor.h'
# Add microsoft.ai.machinelearning headers
files_list.append('')
+ # Add custom operator headers
+ mlop_path = 'onnxruntime\\core\\providers\\dml\\dmlexecutionprovider\\inc\\mloperatorauthor.h'
+ files_list.append('')
# Process microsoft.ai.machinelearning.winmd
files_list.append('')
- # Add custom operator headers
- files_list.append('')
+ interop_dll = 'Microsoft.AI.MachineLearning.Interop\\netstandard2.0\\Microsoft.AI.MachineLearning.Interop.dll'
+ files_list.append('')
+ interop_pdb = 'Microsoft.AI.MachineLearning.Interop\\netstandard2.0\\Microsoft.AI.MachineLearning.Interop.pdb'
+ files_list.append('')
# Process runtimes
# Process onnxruntime import lib, dll, and pdb
@@ -254,18 +276,24 @@ def generate_files(list, args):
# Process props and targets files
if is_windowsai_package:
- # Process props file
- windowsai_props = os.path.join(args.sources_path, 'csharp', 'src', 'Microsoft.ML.OnnxRuntime',
- 'Microsoft.AI.MachineLearning.props')
- files_list.append('')
- # Process targets files
- windowsai_targets = os.path.join(args.sources_path, 'csharp', 'src', 'Microsoft.ML.OnnxRuntime',
- 'Microsoft.AI.MachineLearning.targets')
- files_list.append('')
- # Process rules files
- windowsai_rules = os.path.join(args.sources_path, 'csharp', 'src', 'Microsoft.ML.OnnxRuntime',
- 'Microsoft.AI.MachineLearning.Rules.Project.xml')
- files_list.append('')
+ windowsai_src = 'Microsoft.AI.MachineLearning'
+ # Process native props
+ windowsai_props = 'Microsoft.AI.MachineLearning.props'
+ windowsai_native_props = os.path.join(args.sources_path, 'csharp', 'src', windowsai_src, windowsai_props)
+ files_list.append('')
+ # Process native targets
+ windowsai_targets = 'Microsoft.AI.MachineLearning.targets'
+ windowsai_native_targets = os.path.join(args.sources_path, 'csharp', 'src', windowsai_src, windowsai_targets)
+ files_list.append('')
+ # Process native rules
+ windowsai_rules = 'Microsoft.AI.MachineLearning.Rules.Project.xml'
+ windowsai_native_rules = os.path.join(args.sources_path, 'csharp', 'src', windowsai_src, windowsai_rules)
+ files_list.append('')
+ # Process .net standard 2.0 targets
+ interop_src = 'Microsoft.AI.MachineLearning.Interop'
+ interop_targets = 'Microsoft.AI.MachineLearning.targets'
+ windowsai_net20_targets = os.path.join(args.sources_path, 'csharp', 'src', interop_src, interop_targets)
+ files_list.append('')
if is_cpu_package or is_cuda_gpu_package or is_dml_package or is_mklml_package:
# Process props file