diff --git a/Microsoft.ML.sln b/Microsoft.ML.sln
index 6b0b880210..c9aae84314 100644
--- a/Microsoft.ML.sln
+++ b/Microsoft.ML.sln
@@ -274,6 +274,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.ML.FastTree", "Mi
pkg\Microsoft.ML.FastTree\Microsoft.ML.FastTree.symbols.nupkgproj = pkg\Microsoft.ML.FastTree\Microsoft.ML.FastTree.symbols.nupkgproj
EndProjectSection
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.StableApi", "tools-local\Microsoft.ML.StableApi\Microsoft.ML.StableApi.csproj", "{F308DC6B-7E59-40D7-A581-834E8CD99CFE}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -968,6 +970,18 @@ Global
{E02DA82D-3FEE-4C60-BD80-9EC3C3448DFC}.Release-Intrinsics|Any CPU.Build.0 = Release-Intrinsics|Any CPU
{E02DA82D-3FEE-4C60-BD80-9EC3C3448DFC}.Release-netfx|Any CPU.ActiveCfg = Release-netfx|Any CPU
{E02DA82D-3FEE-4C60-BD80-9EC3C3448DFC}.Release-netfx|Any CPU.Build.0 = Release-netfx|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Debug-Intrinsics|Any CPU.ActiveCfg = Debug-Intrinsics|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Debug-Intrinsics|Any CPU.Build.0 = Debug-Intrinsics|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Debug-netfx|Any CPU.ActiveCfg = Debug-netfx|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Debug-netfx|Any CPU.Build.0 = Debug-netfx|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Release-Intrinsics|Any CPU.ActiveCfg = Release-Intrinsics|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Release-Intrinsics|Any CPU.Build.0 = Release-Intrinsics|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Release-netfx|Any CPU.ActiveCfg = Release-netfx|Any CPU
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE}.Release-netfx|Any CPU.Build.0 = Release-netfx|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1055,6 +1069,7 @@ Global
{AD7058C9-5608-49A8-BE23-58C33A74EE91} = {D3D38B03-B557-484D-8348-8BADEE4DF592}
{E02DA82D-3FEE-4C60-BD80-9EC3C3448DFC} = {09EADF06-BE25-4228-AB53-95AE3E15B530}
{B1B3F284-FA3D-4D76-A712-FF04495D244B} = {D3D38B03-B557-484D-8348-8BADEE4DF592}
+ {F308DC6B-7E59-40D7-A581-834E8CD99CFE} = {7F13E156-3EBA-4021-84A5-CD56BA72F99E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {41165AF1-35BB-4832-A189-73060F82B01D}
diff --git a/build/Dependencies.props b/build/Dependencies.props
index 17f25a17a3..963fecead7 100644
--- a/build/Dependencies.props
+++ b/build/Dependencies.props
@@ -36,6 +36,7 @@
1.1.1
2.6.0
4.0.9
+ 1.0.0-beta.19225.5
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index be6d1d53bc..f7ef5ae42b 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -21,6 +21,19 @@
$(PackageRid)-$(TargetArchitecture)
+
+
+ $(IsStableProject)
+ $(ToolsDir)dotnetcli/dotnet
+
+
+
+ true
+ false
+
+
stylecop.json
-
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
index 2c6ae691d4..28c54362df 100644
--- a/src/Directory.Build.targets
+++ b/src/Directory.Build.targets
@@ -26,4 +26,32 @@
+
+
+
+
+ $(ResolveReferencesDependsOn);
+ ResolveMatchingContract
+
+
+ $(RepoRoot)tools-local\Microsoft.ML.StableApi\Microsoft.ML.StableApi.csproj
+
+
+
+
+
+
+
+
+
+
+
+ %(ResolvedMatchingContract.DependencyPaths)
+
+
+
diff --git a/tools-local/Microsoft.ML.StableApi/Microsoft.ML.StableApi.csproj b/tools-local/Microsoft.ML.StableApi/Microsoft.ML.StableApi.csproj
new file mode 100644
index 0000000000..e1b569a026
--- /dev/null
+++ b/tools-local/Microsoft.ML.StableApi/Microsoft.ML.StableApi.csproj
@@ -0,0 +1,45 @@
+
+
+
+
+ netstandard2.0
+ netstandard2.0;netcoreapp3.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_contractReferencePath Include="@(ReferencePath)" Condition="'%(FileName)' == '$(ContractName)'" />
+ <_allReferenceDirectories Include="%(ReferencePath.RootDir)%(ReferencePath.Directory)" />
+ <_contractReferencePath Include="@(ReferencePath)" Condition="'%(FileName)' == '$(ContractName)'" />
+ <_contractReferencePath DependencyPaths="@(_allReferenceDirectories)" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+