diff --git a/Directory.Build.props b/Directory.Build.props
index b5cec47e8eb..41a8578cd5c 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -3,19 +3,37 @@
Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))\AspNetCoreSettings.props"
Condition=" '$(CI)' != 'true' AND '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))' != '' " />
-
+
+ false
+
+
+
+
+ false
+ true
+ true
+
+
+
+ true
+ https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt
+ https://go.microsoft.com/fwlink/?LinkID=288859
+ https://asp.net
+ true
+ 7.2
+
Microsoft .NET Extensions
https://github.com/aspnet/Extensions
git
$(MSBuildThisFileDirectory)
- $(MSBuildThisFileDirectory)eng\AspNetCore.snk
true
true
strict
+ MicrosoftAspNetCore
$(MSBuildThisFileDirectory)artifacts\
$(MSBuildThisFileDirectory)artifacts\build\
$(MSBuildThisFileDirectory)src\Shared\src\
@@ -23,6 +41,7 @@
$(ArtifactsConfigurationDir)packages\
$(BasePackageOutputPath)product\
$(BasePackageOutputPath)internal\
+ portable
$([MSBuild]::MakeRelative($(RepositoryRoot), $(MSBuildProjectDirectory)))
@@ -33,31 +52,23 @@
false
true
- true
true
true
+
- true
-
- true
+
+ netcoreapp3.0
+ $(DeveloperBuildTestTfms)
+ $(StandardTestTfms);net461
-
-
-
-
-
-
-
-
-
diff --git a/Directory.Build.targets b/Directory.Build.targets
index dff2e63c6e1..dc0fd164d85 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -1,17 +1,16 @@
- $(ProductPackageOutputPath)
- $(InternalPackageOutputPath)
-
$(MicrosoftNETCoreAppPackageVersion)
$(AssemblyName)
- false
+ $(PackageId)
+ false
true
+ $(IsProductComponent)
@@ -35,7 +34,7 @@
- true
+ true
false
@@ -43,4 +42,11 @@
+
+
+
+
+ $(ProductPackageOutputPath)
+ $(InternalPackageOutputPath)
+
diff --git a/Extensions.sln b/Extensions.sln
index 26866a5e701..a58775cca58 100644
--- a/Extensions.sln
+++ b/Extensions.sln
@@ -29,14 +29,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{36617B
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Sources.Tests", "src\Shared\test\Microsoft.Extensions.Sources.Tests.csproj", "{33E57F0C-3CDB-4EB8-B6BE-6A0875B42EDE}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{2C7E2059-8542-4BC8-A170-39F6B9EDE548}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ThrowingLibrary", "src\Shared\testassets\ThrowingLibrary\ThrowingLibrary.csproj", "{727D7A4D-49ED-4FBF-B713-1091191C78AD}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{7A597F60-480C-4BFF-A940-26094BB0CA62}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaselineGenerator", "eng\tools\BaselineGenerator\BaselineGenerator.csproj", "{532F85C9-F589-40E7-814F-F0463A927788}"
-EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.Extensions.CommandLineUtils.Sources", "src\Shared\src\CommandLineUtils\Microsoft.Extensions.CommandLineUtils.Sources.shproj", "{00947D4A-C20E-46E3-90C3-6CD6BC87EE72}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestingUtils", "TestingUtils", "{3DBE2341-7244-4095-A60C-A0AF7E187C9B}"
@@ -77,7 +69,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FilePr
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Manifest.Task", "src\FileProviders\Manifest.MSBuildTask\src\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.csproj", "{DB61A8BF-1340-4D6E-80A3-29D0E1F39F35}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Test", "src\FileProviders\Manifest.MSBuildTask\test\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Test.csproj", "{EFE02002-DD70-4570-A5EF-9B4521771345}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests", "src\FileProviders\Manifest.MSBuildTask\test\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests.csproj", "{EFE02002-DD70-4570-A5EF-9B4521771345}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Physical", "src\FileProviders\Physical\src\Microsoft.Extensions.FileProviders.Physical.csproj", "{54E60C1B-DD8F-4407-B787-EEA4FECD7B27}"
EndProject
@@ -155,41 +147,41 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Option
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Logging", "Logging", "{36DFDB12-6055-43D9-8027-B052667AD34F}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging", "src\logging\Logging\src\Microsoft.Extensions.Logging.csproj", "{C29CF488-733D-419D-B4E0-D45417EEEA2E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging", "src\Logging\Logging\src\Microsoft.Extensions.Logging.csproj", "{C29CF488-733D-419D-B4E0-D45417EEEA2E}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Abstractions", "src\logging\Logging.Abstractions\src\Microsoft.Extensions.Logging.Abstractions.csproj", "{6E8EA53E-19B0-46E8-84DF-D32FBC47966F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Abstractions", "src\Logging\Logging.Abstractions\src\Microsoft.Extensions.Logging.Abstractions.csproj", "{6E8EA53E-19B0-46E8-84DF-D32FBC47966F}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Analyzers", "src\logging\Logging.Analyzers\src\Microsoft.Extensions.Logging.Analyzers.csproj", "{41DF3B4F-9E3C-4D4B-A824-FC5B2094A1C8}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Analyzers", "src\Logging\Logging.Analyzers\src\Microsoft.Extensions.Logging.Analyzers.csproj", "{41DF3B4F-9E3C-4D4B-A824-FC5B2094A1C8}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Analyzer.Tests", "src\logging\Logging.Analyzers\test\Microsoft.Extensions.Logging.Analyzer.Tests.csproj", "{938990D7-422A-44B2-AA6C-1AE6F4FF2CB1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Analyzer.Tests", "src\Logging\Logging.Analyzers\test\Microsoft.Extensions.Logging.Analyzer.Tests.csproj", "{938990D7-422A-44B2-AA6C-1AE6F4FF2CB1}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.AzureAppServices", "src\logging\Logging.AzureAppServices\src\Microsoft.Extensions.Logging.AzureAppServices.csproj", "{91CC7F32-CEA6-4039-94EE-B1000DBE0DBB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.AzureAppServices", "src\Logging\Logging.AzureAppServices\src\Microsoft.Extensions.Logging.AzureAppServices.csproj", "{91CC7F32-CEA6-4039-94EE-B1000DBE0DBB}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.AzureAppServices.Tests", "src\logging\Logging.AzureAppServices\test\Microsoft.Extensions.Logging.AzureAppServices.Tests.csproj", "{92B4C424-DA96-464E-B9DA-4D3ECB4176ED}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.AzureAppServices.Tests", "src\Logging\Logging.AzureAppServices\test\Microsoft.Extensions.Logging.AzureAppServices.Tests.csproj", "{92B4C424-DA96-464E-B9DA-4D3ECB4176ED}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Configuration", "src\logging\Logging.Configuration\src\Microsoft.Extensions.Logging.Configuration.csproj", "{053B27BF-69AD-42F5-8841-F9F631DBB1BC}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Configuration", "src\Logging\Logging.Configuration\src\Microsoft.Extensions.Logging.Configuration.csproj", "{053B27BF-69AD-42F5-8841-F9F631DBB1BC}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Console", "src\logging\Logging.Console\src\Microsoft.Extensions.Logging.Console.csproj", "{BBE29F30-74A4-4504-8EE4-16D4DFDAA72D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Console", "src\Logging\Logging.Console\src\Microsoft.Extensions.Logging.Console.csproj", "{BBE29F30-74A4-4504-8EE4-16D4DFDAA72D}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Debug", "src\logging\Logging.Debug\src\Microsoft.Extensions.Logging.Debug.csproj", "{ABEC8A89-AA53-4FBC-BB00-451A970CB1DD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Debug", "src\Logging\Logging.Debug\src\Microsoft.Extensions.Logging.Debug.csproj", "{ABEC8A89-AA53-4FBC-BB00-451A970CB1DD}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.EventLog", "src\logging\Logging.EventLog\src\Microsoft.Extensions.Logging.EventLog.csproj", "{6D3F09ED-F295-4BD3-931A-2300CDAFBE42}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.EventLog", "src\Logging\Logging.EventLog\src\Microsoft.Extensions.Logging.EventLog.csproj", "{6D3F09ED-F295-4BD3-931A-2300CDAFBE42}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.EventSource", "src\logging\Logging.EventSource\src\Microsoft.Extensions.Logging.EventSource.csproj", "{2B1EE2B3-680C-4D4D-85BC-9FA68D0B7FFA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.EventSource", "src\Logging\Logging.EventSource\src\Microsoft.Extensions.Logging.EventSource.csproj", "{2B1EE2B3-680C-4D4D-85BC-9FA68D0B7FFA}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.EventSource.Tests", "src\logging\Logging.EventSource\test\Microsoft.Extensions.Logging.EventSource.Tests.csproj", "{642D2A25-A019-48A7-99D3-4F05E5B3B138}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.EventSource.Tests", "src\Logging\Logging.EventSource\test\Microsoft.Extensions.Logging.EventSource.Tests.csproj", "{642D2A25-A019-48A7-99D3-4F05E5B3B138}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Testing", "src\logging\Logging.Testing\src\Microsoft.Extensions.Logging.Testing.csproj", "{BEA4DCA4-E98A-4CFA-BFF3-C9F887CDB063}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Testing", "src\Logging\Logging.Testing\src\Microsoft.Extensions.Logging.Testing.csproj", "{BEA4DCA4-E98A-4CFA-BFF3-C9F887CDB063}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Testing.Tests", "src\logging\Logging.Testing\test\Microsoft.Extensions.Logging.Testing.Tests.csproj", "{A08DDDA1-1634-482C-8E79-1E0016D99A93}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Testing.Tests", "src\Logging\Logging.Testing\test\Microsoft.Extensions.Logging.Testing.Tests.csproj", "{A08DDDA1-1634-482C-8E79-1E0016D99A93}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.TraceSource", "src\logging\Logging.TraceSource\src\Microsoft.Extensions.Logging.TraceSource.csproj", "{53A480C7-4C90-400F-859C-9C5C70EE762E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.TraceSource", "src\Logging\Logging.TraceSource\src\Microsoft.Extensions.Logging.TraceSource.csproj", "{53A480C7-4C90-400F-859C-9C5C70EE762E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{26D1BCE2-F638-4984-993D-6BF781E0C652}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "src\logging\samples\SampleApp\SampleApp.csproj", "{4904B307-625D-4E3B-B156-A833583ABAF1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "src\Logging\samples\SampleApp\SampleApp.csproj", "{4904B307-625D-4E3B-B156-A833583ABAF1}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Tests", "src\logging\test\Microsoft.Extensions.Logging.Tests.csproj", "{2042D452-29E5-41E8-B2C1-80EAD6F9C5E6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.Tests", "src\Logging\test\Microsoft.Extensions.Logging.Tests.csproj", "{2042D452-29E5-41E8-B2C1-80EAD6F9C5E6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Options.DataAnnotations", "src\Options\DataAnnotations\src\Microsoft.Extensions.Options.DataAnnotations.csproj", "{9BF9888F-8635-40A0-AC1E-02F2B04C9E59}"
EndProject
@@ -297,11 +289,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JSInterop", "JSInterop", "{
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop", "src\JSInterop\Microsoft.JSInterop\src\Microsoft.JSInterop.csproj", "{6D3807BD-28A8-4B7C-92D2-8A72E1522398}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop.Test", "src\JSInterop\Microsoft.JSInterop\test\Microsoft.JSInterop.Test.csproj", "{FD4896CE-E3FB-458E-8581-7552347C4260}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop.Tests", "src\JSInterop\Microsoft.JSInterop\test\Microsoft.JSInterop.Tests.csproj", "{FD4896CE-E3FB-458E-8581-7552347C4260}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop.JS", "src\JSInterop\Microsoft.JSInterop.JS\src\Microsoft.JSInterop.JS.csproj", "{76258B76-8CDD-471A-9D43-0815B712D668}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.WebAssembly.Interop", "src\JSInterop\Mono.WebAssembly.Interop\src\Mono.WebAssembly.Interop.csproj", "{89B01C5B-42DF-4E99-847E-354B8C5FBA6F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaselineGenerator", "eng\tools\BaselineGenerator\BaselineGenerator.csproj", "{DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
@@ -424,30 +417,6 @@ Global
{33E57F0C-3CDB-4EB8-B6BE-6A0875B42EDE}.Release|x64.Build.0 = Release|Any CPU
{33E57F0C-3CDB-4EB8-B6BE-6A0875B42EDE}.Release|x86.ActiveCfg = Release|Any CPU
{33E57F0C-3CDB-4EB8-B6BE-6A0875B42EDE}.Release|x86.Build.0 = Release|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Debug|x64.ActiveCfg = Debug|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Debug|x64.Build.0 = Debug|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Debug|x86.ActiveCfg = Debug|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Debug|x86.Build.0 = Debug|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Release|Any CPU.Build.0 = Release|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Release|x64.ActiveCfg = Release|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Release|x64.Build.0 = Release|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Release|x86.ActiveCfg = Release|Any CPU
- {727D7A4D-49ED-4FBF-B713-1091191C78AD}.Release|x86.Build.0 = Release|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Debug|x64.ActiveCfg = Debug|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Debug|x64.Build.0 = Debug|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Debug|x86.ActiveCfg = Debug|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Debug|x86.Build.0 = Debug|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Release|Any CPU.Build.0 = Release|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Release|x64.ActiveCfg = Release|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Release|x64.Build.0 = Release|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Release|x86.ActiveCfg = Release|Any CPU
- {532F85C9-F589-40E7-814F-F0463A927788}.Release|x86.Build.0 = Release|Any CPU
{62EF7870-CA1F-4815-BC80-8477D358A16C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{62EF7870-CA1F-4815-BC80-8477D358A16C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{62EF7870-CA1F-4815-BC80-8477D358A16C}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -1804,6 +1773,18 @@ Global
{89B01C5B-42DF-4E99-847E-354B8C5FBA6F}.Release|x64.Build.0 = Release|Any CPU
{89B01C5B-42DF-4E99-847E-354B8C5FBA6F}.Release|x86.ActiveCfg = Release|Any CPU
{89B01C5B-42DF-4E99-847E-354B8C5FBA6F}.Release|x86.Build.0 = Release|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Debug|x64.Build.0 = Debug|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Debug|x86.Build.0 = Debug|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Release|x64.ActiveCfg = Release|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Release|x64.Build.0 = Release|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Release|x86.ActiveCfg = Release|Any CPU
+ {DE47CB52-3E6F-4A6A-910E-AE118A00CE1A}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1818,9 +1799,6 @@ Global
{4D8EC9A1-4854-4A88-8FE2-0B62C67110CB} = {B938B88D-2FD2-445F-B194-DEB3FF405ACF}
{9D2408A7-F77B-4D79-8FE3-5A9B67DF5AD3} = {B938B88D-2FD2-445F-B194-DEB3FF405ACF}
{33E57F0C-3CDB-4EB8-B6BE-6A0875B42EDE} = {36617B81-CF74-4FCB-A7CA-E95DF3CA92FC}
- {2C7E2059-8542-4BC8-A170-39F6B9EDE548} = {36617B81-CF74-4FCB-A7CA-E95DF3CA92FC}
- {727D7A4D-49ED-4FBF-B713-1091191C78AD} = {2C7E2059-8542-4BC8-A170-39F6B9EDE548}
- {532F85C9-F589-40E7-814F-F0463A927788} = {7A597F60-480C-4BFF-A940-26094BB0CA62}
{00947D4A-C20E-46E3-90C3-6CD6BC87EE72} = {36617B81-CF74-4FCB-A7CA-E95DF3CA92FC}
{62EF7870-CA1F-4815-BC80-8477D358A16C} = {3DBE2341-7244-4095-A60C-A0AF7E187C9B}
{9D0EDBEC-22F9-4C3C-9349-B5888F709B6A} = {3DBE2341-7244-4095-A60C-A0AF7E187C9B}
diff --git a/NuGet.config b/NuGet.config
index 84a9f003130..f3152af8719 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -2,11 +2,11 @@
-
+
+
+
+
+
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 7a5400934b6..c9a85e72211 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,40 +1,147 @@
-#
-# See https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema for details
-#
+variables:
+ - name: _TeamName
+ value: AspNetCore
+ - name: _GeneralBuildArg
+ value: /p:ArtifactsShippingPackagesDir=$(Build.SourcesDirectory)/artifacts/$(_BuildConfig)/packages/product/
+ /p:ArtifactsNonShippingPackagesDir=$(Build.SourcesDirectory)/artifacts/$(_BuildConfig)/packages/internal/
-# Only run CI builds for these branches
+# CI and PR triggers
trigger:
- branches:
- include:
- - 'master'
- - 'release/*'
- - 'internal/release/*'
-# Run PR validation on all branches
-pr:
- branches:
- include:
- - '*'
+- master
-name: $(Date:yyyyMMdd).$(Rev:rr)
+pr:
+- master
jobs:
-- template: eng/templates/default-build.yml
+- template: /eng/common/templates/jobs/jobs.yml
parameters:
- agentOs: Windows
- configuration: Release
- codeSign: true
- publishToBar: true
- artifacts:
- publish: true
- name: artifacts
- path: artifacts/
+ enableMicrobuild: true
+ enablePublishBuildArtifacts: true
+ enablePublishTestResults: true
+ enablePublishBuildAssets: true
+ enableTelemetry: true
+ helixRepo: aspnet/Extensions
+ jobs:
+ - job: Windows
+ pool:
+ # For public or PR jobs, use the hosted pool. For internal jobs use the internal pool.
+ # Will eventually change this to two BYOC pools.
+ ${{ if ne(variables['System.TeamProject'], 'internal') }}:
+ name: Hosted VS2017
+ vmImage: vs2017-win2016
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: dotnet-internal-temp
+ variables:
+ # Only enable publishing in official builds.
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ # DotNet-Blob-Feed provides: dotnetfeed-storage-access-key-1
+ # Publish-Build-Assets provides: MaestroAccessToken, BotAccount-dotnet-maestro-bot-PAT
+ - group: DotNet-Blob-Feed
+ - group: Publish-Build-Assets
+ - name: _OfficialBuildArgs
+ value: /p:DotNetSignType=$(_SignType)
+ /p:TeamName=$(_TeamName)
+ /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1)
+ /p:DotNetPublishBlobFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
+ /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed)
+ /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
+ # else
+ - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
+ - name: _OfficialBuildArgs
+ value: ''
+ strategy:
+ matrix:
+ ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
+ Debug:
+ _BuildConfig: Debug
+ _SignType: test
+ _DotNetPublishToBlobFeed: false
+ _BuildArgs: $(_GeneralBuildArg)
-- template: eng/templates/default-build.yml
- parameters:
- agentOs: macOS
- configuration: Release
+ Release:
+ _BuildConfig: Release
+ # PRs or external builds are not signed.
+ ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
+ _SignType: test
+ _DotNetPublishToBlobFeed: false
+ _BuildArgs: $(_GeneralBuildArg)
+ ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ _SignType: real
+ _DotNetPublishToBlobFeed: true
+ _BuildArgs: $(_OfficialBuildArgs)
+ $(_GeneralBuildArg)
+ steps:
+ - checkout: self
+ clean: true
+ - script: eng\common\cibuild.cmd
+ -warnaserror $False
+ -configuration $(_BuildConfig)
+ -prepareMachine
+ $(_BuildArgs)
+ displayName: Build and Publish
+ - powershell: eng\common\msbuild.ps1 eng/repo.targets '/p:IsFinalBuild=$(IsFinalBuild)' '/p:CI=true'
+ displayName: Set CI Tags
+ condition: eq(variables['_BuildConfig'], 'Release')
+ - task: PublishBuildArtifacts@1
+ displayName: Upload package artifacts
+ condition: and(eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
+ inputs:
+ pathtoPublish: artifacts/
+ ${{ if eq(parameters.artifacts.name, '') }}:
+ artifactName: artifacts
+ ${{ if ne(parameters.artifacts.name, '') }}:
+ artifactName: ${{ parameters.artifacts.name }}
+ artifactType: Container
+ parallel: true
-- template: eng/templates/default-build.yml
- parameters:
- agentOs: Linux
- configuration: Release
+ - job: Ubuntu_16_04
+ displayName: 'Ubuntu 16.04'
+ pool:
+ name: Hosted Ubuntu 1604
+ vmImage: ubuntu-16.04
+ strategy:
+ matrix:
+ ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
+ Debug:
+ _BuildConfig: Debug
+ _SignType: none
+ _DotNetPublishToBlobFeed : false
+ Release:
+ _BuildConfig: Release
+ _SignType: none
+ _DotNetPublishToBlobFeed : false
+ steps:
+ - checkout: self
+ clean: true
+ - script: eng/common/cibuild.sh
+ --warnAsError false
+ --configuration $(_BuildConfig)
+ --prepareMachine
+ $(_GeneralBuildArg)
+ displayName: Build
+
+ - job: OSX_10_13
+ displayName: 'OSX'
+ pool:
+ name: Hosted macOS
+ vmImage: macOS-10.13
+ strategy:
+ matrix:
+ ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
+ Debug:
+ _BuildConfig: Debug
+ _SignType: none
+ _DotNetPublishToBlobFeed : false
+ Release:
+ _BuildConfig: Release
+ _SignType: none
+ _DotNetPublishToBlobFeed : false
+ steps:
+ - checkout: self
+ clean: true
+ - script: eng/common/cibuild.sh
+ --warnAsError false
+ --configuration $(_BuildConfig)
+ --prepareMachine
+ $(_GeneralBuildArg)
+ displayName: Build
diff --git a/build.cmd b/build.cmd
index b6c8d24864f..41182e23232 100644
--- a/build.cmd
+++ b/build.cmd
@@ -1,2 +1,3 @@
-@ECHO OFF
-PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0build.ps1' %*; exit $LASTEXITCODE"
+@echo off
+powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0eng\common\Build.ps1""" -warnaserror $False -build -restore -pack %*"
+exit /b %ErrorLevel%
diff --git a/build.ps1 b/build.ps1
deleted file mode 100755
index 278901e1120..00000000000
--- a/build.ps1
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/usr/bin/env pwsh -c
-#requires -version 4
-
-<#
-.SYNOPSIS
-Executes KoreBuild commands.
-
-.DESCRIPTION
-Downloads korebuild if required. Then executes the KoreBuild command. To see available commands, execute with `-Command help`.
-
-.PARAMETER Path
-The folder to build. Defaults to the folder containing this script.
-
-.PARAMETER Channel
-The channel of KoreBuild to download. Overrides the value from the config file.
-
-.PARAMETER DotNetHome
-The directory where .NET Core tools will be stored.
-
-.PARAMETER ToolsSource
-The base url where build tools can be downloaded. Overrides the value from the config file.
-
-.PARAMETER Update
-Updates KoreBuild to the latest version even if a lock file is present.
-
-.PARAMETER Reinstall
-Re-installs KoreBuild
-
-.PARAMETER ConfigFile
-The path to the configuration file that stores values. Defaults to korebuild.json.
-
-.PARAMETER ToolsSourceSuffix
-The Suffix to append to the end of the ToolsSource. Useful for query strings in blob stores.
-
-.PARAMETER CI
-Sets up CI specific settings and variables.
-
-.PARAMETER PackageVersionPropsUrl
-(optional) the url of the package versions props path containing dependency versions.
-
-.PARAMETER MSBuildArguments
-Additional MSBuild arguments to be passed through.
-
-.NOTES
-This function will create a file $PSScriptRoot/korebuild-lock.txt. This lock file can be committed to source, but does not have to be.
-When the lockfile is not present, KoreBuild will create one using latest available version from $Channel.
-
-The $ConfigFile is expected to be an JSON file. It is optional, and the configuration values in it are optional as well. Any options set
-in the file are overridden by command line parameters.
-
-.EXAMPLE
-Example config file:
-```json
-{
- "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json",
- "channel": "master",
- "toolsSource": "https://aspnetcore.blob.core.windows.net/buildtools"
-}
-```
-#>
-[CmdletBinding(PositionalBinding = $false)]
-param(
- [string]$Path = $PSScriptRoot,
- [Alias('c')]
- [string]$Channel,
- [Alias('d')]
- [string]$DotNetHome,
- [Alias('s')]
- [string]$ToolsSource,
- [Alias('u')]
- [switch]$Update,
- [switch]$Reinstall,
- [string]$ToolsSourceSuffix,
- [string]$ConfigFile = $null,
- [switch]$CI,
- [string]$PackageVersionPropsUrl = $env:PB_PackageVersionPropsUrl,
- [Parameter(ValueFromRemainingArguments = $true)]
- [string[]]$MSBuildArguments
-)
-
-Set-StrictMode -Version 2
-$ErrorActionPreference = 'Stop'
-
-#
-# Functions
-#
-
-function Get-KoreBuild {
-
- $lockFile = Join-Path $Path 'korebuild-lock.txt'
-
- if (!(Test-Path $lockFile) -or $Update) {
- Get-RemoteFile "$ToolsSource/korebuild/channels/$Channel/latest.txt" $lockFile $ToolsSourceSuffix
- }
-
- $version = Get-Content $lockFile | Where-Object { $_ -like 'version:*' } | Select-Object -first 1
- if (!$version) {
- Write-Error "Failed to parse version from $lockFile. Expected a line that begins with 'version:'"
- }
- $version = $version.TrimStart('version:').Trim()
- $korebuildPath = "$DotNetHome/buildtools/korebuild/$version"
-
- if ($Reinstall -and (Test-Path $korebuildPath)) {
- Remove-Item -Force -Recurse $korebuildPath
- }
-
- if (!(Test-Path $korebuildPath)) {
- Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version"
- New-Item -ItemType Directory -Path $korebuildPath | Out-Null
- $remotePath = "$ToolsSource/korebuild/artifacts/$version/korebuild.$version.zip"
-
- try {
- $tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip"
- Get-RemoteFile $remotePath $tmpfile $ToolsSourceSuffix
- if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) {
- # Use built-in commands where possible as they are cross-plat compatible
- Microsoft.PowerShell.Archive\Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath
- }
- else {
- # Fallback to old approach for old installations of PowerShell
- Add-Type -AssemblyName System.IO.Compression.FileSystem
- [System.IO.Compression.ZipFile]::ExtractToDirectory($tmpfile, $korebuildPath)
- }
- }
- catch {
- Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore
- throw
- }
- finally {
- Remove-Item $tmpfile -ErrorAction Ignore
- }
- }
-
- return $korebuildPath
-}
-
-function Get-RemoteFile([string]$RemotePath, [string]$LocalPath, [string]$RemoteSuffix) {
- if ($RemotePath -notlike 'http*') {
- Copy-Item $RemotePath $LocalPath
- return
- }
-
- $retries = 10
- while ($retries -gt 0) {
- $retries -= 1
- try {
- Invoke-WebRequest -UseBasicParsing -Uri $($RemotePath + $RemoteSuffix) -OutFile $LocalPath
- return
- }
- catch {
- Write-Verbose "Request failed. $retries retries remaining"
- }
- }
-
- Write-Error "Download failed: '$RemotePath'."
-}
-
-#
-# Main
-#
-
-# Load configuration or set defaults
-
-$Path = Resolve-Path $Path
-if (!$ConfigFile) { $ConfigFile = Join-Path $Path 'korebuild.json' }
-
-if (Test-Path $ConfigFile) {
- try {
- $config = Get-Content -Raw -Encoding UTF8 -Path $ConfigFile | ConvertFrom-Json
- if ($config) {
- if (!($Channel) -and (Get-Member -Name 'channel' -InputObject $config)) { [string] $Channel = $config.channel }
- if (!($ToolsSource) -and (Get-Member -Name 'toolsSource' -InputObject $config)) { [string] $ToolsSource = $config.toolsSource}
- }
- }
- catch {
- Write-Host -ForegroundColor Red $Error[0]
- Write-Error "$ConfigFile contains invalid JSON."
- exit 1
- }
-}
-
-if (!$DotNetHome) {
- $DotNetHome = if ($env:DOTNET_HOME) { $env:DOTNET_HOME } `
- elseif ($CI) { Join-Path $PSScriptRoot '.dotnet' } `
- elseif ($env:USERPROFILE) { Join-Path $env:USERPROFILE '.dotnet'} `
- elseif ($env:HOME) {Join-Path $env:HOME '.dotnet'}`
- else { Join-Path $PSScriptRoot '.dotnet'}
-}
-
-if (!$Channel) { $Channel = 'master' }
-if (!$ToolsSource) { $ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' }
-
-[string[]] $ProdConArgs = @()
-
-if ($PackageVersionPropsUrl) {
- $IntermediateDir = Join-Path $PSScriptRoot 'obj'
- $PropsFilePath = Join-Path $IntermediateDir 'PackageVersions.props'
- New-Item -ItemType Directory $IntermediateDir -ErrorAction Ignore | Out-Null
- Get-RemoteFile "${PackageVersionPropsUrl}${env:PB_AccessTokenSuffix}" $PropsFilePath
- $ProdConArgs += "-p:DotNetPackageVersionPropsPath=$PropsFilePath"
-}
-
-# Execute
-
-$korebuildPath = Get-KoreBuild
-Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1')
-
-# PipeBuild parameters
-$ProdConArgs += "-p:DotNetAssetRootUrl=${env:PB_AssetRootUrl}"
-$ProdConArgs += "-p:DotNetRestoreSources=${env:PB_RestoreSource}"
-$ProdConArgs += "-p:DotNetProductBuildId=${env:ProductBuildId}"
-$ProdConArgs += "-p:PublishBlobFeedUrl=${env:PB_PublishBlobFeedUrl}"
-$ProdConArgs += "-p:PublishType=${env:PB_PublishType}"
-$ProdConArgs += "-p:SkipTests=${env:PB_SkipTests}"
-$ProdConArgs += "-p:IsFinalBuild=${env:PB_IsFinalBuild}"
-$ProdConArgs += "-p:SignType=${env:PB_SignType}"
-
-try {
- Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile -CI:$CI
- Invoke-KoreBuildCommand 'default-build' @ProdConArgs @MSBuildArguments
-}
-finally {
- Remove-Module 'KoreBuild' -ErrorAction Ignore
-}
diff --git a/build.sh b/build.sh
index c412d916d10..5a7d8fcd41f 100755
--- a/build.sh
+++ b/build.sh
@@ -1,283 +1,16 @@
#!/usr/bin/env bash
-set -euo pipefail
+source="${BASH_SOURCE[0]}"
-#
-# variables
-#
+# resolve $SOURCE until the file is no longer a symlink
+while [[ -h $source ]]; do
+ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+ source="$(readlink "$source")"
-RESET="\033[0m"
-RED="\033[0;31m"
-YELLOW="\033[0;33m"
-MAGENTA="\033[0;95m"
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-verbose=false
-update=false
-reinstall=false
-repo_path="$DIR"
-channel=''
-tools_source=''
-tools_source_suffix=''
-package_version_props_url="${PB_PACKAGEVERSIONPROPSURL:-}"
-props_file_path=''
-ci=false
-msbuild_args=()
-
-#
-# Functions
-#
-__usage() {
- echo "Usage: $(basename "${BASH_SOURCE[0]}") [options] [[--] ...]"
- echo ""
- echo "Arguments:"
- echo " ... Arguments passed to the build. Variable number of arguments allowed."
- echo ""
- echo "Options:"
- echo " --verbose Show verbose output."
- echo " -c|--channel The channel of KoreBuild to download. Overrides the value from the config file.."
- echo " --config-file The path to the configuration file that stores values. Defaults to korebuild.json."
- echo " -d|--dotnet-home The directory where .NET Core tools will be stored. Defaults to '\$DOTNET_HOME' or '\$HOME/.dotnet."
- echo " --path The directory to build. Defaults to the directory containing the script."
- echo " -s|--tools-source|-ToolsSource The base url where build tools can be downloaded. Overrides the value from the config file."
- echo " --tools-source-suffix|-ToolsSourceSuffix The suffix to append to tools-source. Useful for query strings."
- echo " -u|--update Update to the latest KoreBuild even if the lock file is present."
- echo " --reinstall Reinstall KoreBuild."
- echo " --ci Apply CI specific settings and environment variables."
- echo " --package-version-props-url The url of the package versions props path containing dependency versions."
- echo ""
- echo "Description:"
- echo " This function will create a file \$DIR/korebuild-lock.txt. This lock file can be committed to source, but does not have to be."
- echo " When the lockfile is not present, KoreBuild will create one using latest available version from \$channel."
-
- if [[ "${1:-}" != '--no-exit' ]]; then
- exit 2
- fi
-}
-
-get_korebuild() {
- local version
- local lock_file="$repo_path/korebuild-lock.txt"
- if [ ! -f "$lock_file" ] || [ "$update" = true ]; then
- __get_remote_file "$tools_source/korebuild/channels/$channel/latest.txt" "$lock_file" "$tools_source_suffix"
- fi
- version="$(grep 'version:*' -m 1 "$lock_file")"
- if [[ "$version" == '' ]]; then
- __error "Failed to parse version from $lock_file. Expected a line that begins with 'version:'"
- return 1
- fi
- version="$(echo "${version#version:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
- local korebuild_path="$DOTNET_HOME/buildtools/korebuild/$version"
-
- if [ "$reinstall" = true ] && [ -d "$korebuild_path" ]; then
- rm -rf "$korebuild_path"
- fi
-
- {
- if [ ! -d "$korebuild_path" ]; then
- mkdir -p "$korebuild_path"
- local remote_path="$tools_source/korebuild/artifacts/$version/korebuild.$version.zip"
- tmpfile="$(mktemp)"
- echo -e "${MAGENTA}Downloading KoreBuild ${version}${RESET}"
- if __get_remote_file "$remote_path" "$tmpfile" "$tools_source_suffix"; then
- unzip -q -d "$korebuild_path" "$tmpfile"
- fi
- rm "$tmpfile" || true
- fi
-
- source "$korebuild_path/KoreBuild.sh"
- } || {
- if [ -d "$korebuild_path" ]; then
- echo "Cleaning up after failed installation"
- rm -rf "$korebuild_path" || true
- fi
- return 1
- }
-}
-
-__error() {
- echo -e "${RED}error: $*${RESET}" 1>&2
-}
-
-__warn() {
- echo -e "${YELLOW}warning: $*${RESET}"
-}
-
-__machine_has() {
- hash "$1" > /dev/null 2>&1
- return $?
-}
-
-__get_remote_file() {
- local remote_path=$1
- local local_path=$2
- local remote_path_suffix=$3
-
- if [[ "$remote_path" != 'http'* ]]; then
- cp "$remote_path" "$local_path"
- return 0
- fi
-
- local failed=false
- if __machine_has wget; then
- wget --tries 10 --quiet -O "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
- else
- failed=true
- fi
-
- if [ "$failed" = true ] && __machine_has curl; then
- failed=false
- curl --retry 10 -sSL -f --create-dirs -o "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
- fi
-
- if [ "$failed" = true ]; then
- __error "Download failed: $remote_path" 1>&2
- return 1
- fi
-}
-
-#
-# main
-#
-
-while [[ $# -gt 0 ]]; do
- case $1 in
- -\?|-h|--help)
- __usage --no-exit
- exit 0
- ;;
- -c|--channel|-Channel)
- shift
- channel="${1:-}"
- [ -z "$channel" ] && __usage
- ;;
- --config-file|-ConfigFile)
- shift
- config_file="${1:-}"
- [ -z "$config_file" ] && __usage
- if [ ! -f "$config_file" ]; then
- __error "Invalid value for --config-file. $config_file does not exist."
- exit 1
- fi
- ;;
- -d|--dotnet-home|-DotNetHome)
- shift
- DOTNET_HOME="${1:-}"
- [ -z "$DOTNET_HOME" ] && __usage
- ;;
- --path|-Path)
- shift
- repo_path="${1:-}"
- [ -z "$repo_path" ] && __usage
- ;;
- -s|--tools-source|-ToolsSource)
- shift
- tools_source="${1:-}"
- [ -z "$tools_source" ] && __usage
- ;;
- --tools-source-suffix|-ToolsSourceSuffix)
- shift
- tools_source_suffix="${1:-}"
- [ -z "$tools_source_suffix" ] && __usage
- ;;
- -u|--update|-Update)
- update=true
- ;;
- --reinstall|-[Rr]einstall)
- reinstall=true
- ;;
- --ci|-[Cc][Ii])
- ci=true
- if [[ -z "${DOTNET_HOME:-}" ]]; then
- DOTNET_HOME="$DIR/.dotnet"
- fi
- ;;
- --verbose|-Verbose)
- verbose=true
- ;;
- --package-version-props-url|-PackageVersionPropsUrl)
- shift
- # This parameter can be an empty string, but it should be set
- [ -z "${1+x}" ] && __error "Missing value for parameter --package-version-props-url" && __usage
- package_version_props_url="$1"
- ;;
- *)
- msbuild_args[${#msbuild_args[*]}]="$1"
- ;;
- esac
- shift
+ # if $source was a relative symlink, we need to resolve it relative to the path where the
+ # symlink file was located
+ [[ $source != /* ]] && source="$scriptroot/$source"
done
-if ! __machine_has unzip; then
- __error 'Missing required command: unzip'
- exit 1
-fi
-
-if ! __machine_has curl && ! __machine_has wget; then
- __error 'Missing required command. Either wget or curl is required.'
- exit 1
-fi
-
-[ -z "${config_file:-}" ] && config_file="$repo_path/korebuild.json"
-if [ -f "$config_file" ]; then
- if __machine_has jq ; then
- if jq '.' "$config_file" >/dev/null ; then
- config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")"
- config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")"
- else
- __error "$config_file contains invalid JSON."
- exit 1
- fi
- elif __machine_has python ; then
- if python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then
- config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")"
- config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")"
- else
- __error "$config_file contains invalid JSON."
- exit 1
- fi
- elif __machine_has python3 ; then
- if python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then
- config_channel="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")"
- config_tools_source="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")"
- else
- __error "$config_file contains invalid JSON."
- exit 1
- fi
- else
- __error 'Missing required command: jq or python. Could not parse the JSON file.'
- exit 1
- fi
-
- [ ! -z "${config_channel:-}" ] && channel="$config_channel"
- [ ! -z "${config_tools_source:-}" ] && tools_source="$config_tools_source"
-fi
-
-[ -z "${DOTNET_HOME:-}" ] && DOTNET_HOME="$HOME/.dotnet"
-[ -z "$channel" ] && channel='master'
-[ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools'
-
-prodcon_args=()
-
-if [ ! -z "$package_version_props_url" ]; then
- intermediate_dir="$repo_path/obj"
- props_file_path="$intermediate_dir/PackageVersions.props"
- mkdir -p "$intermediate_dir"
- __get_remote_file "${package_version_props_url}" "$props_file_path" "${PB_ACCESSTOKENSUFFIX:-}"
- prodcon_args[${#prodcon_args[*]}]="-p:DotNetPackageVersionPropsPath=$props_file_path"
-fi
-
-# PipeBuild parameters
-prodcon_args[${#prodcon_args[*]}]="-p:DotNetAssetRootUrl=${PB_ASSETROOTURL:-}"
-prodcon_args[${#prodcon_args[*]}]="-p:DotNetRestoreSources=${PB_RESTORESOURCE:-}"
-prodcon_args[${#prodcon_args[*]}]="-p:DotNetProductBuildId=${PRODUCTBUILDID:-}"
-prodcon_args[${#prodcon_args[*]}]="-p:PublishBlobFeedUrl=${PB_PUBLISHBLOBFEEDURL:-}"
-prodcon_args[${#prodcon_args[*]}]="-p:PublishType=${PB_PUBLISHTYPE:-}"
-prodcon_args[${#prodcon_args[*]}]="-p:SkipTests=${PB_SKIPTESTS:-}"
-prodcon_args[${#prodcon_args[*]}]="-p:IsFinalBuild=${PB_ISFINALBUILD:-}"
-
-get_korebuild
-set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" "$ci"
-
-# This incantation avoids unbound variable issues if msbuild_args is empty
-# https://stackoverflow.com/questions/7577052/bash-empty-array-expansion-with-set-u
-invoke_korebuild_command default-build "${prodcon_args[@]}" ${msbuild_args[@]+"${msbuild_args[@]}"}
+scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+"$scriptroot/eng/common/build.sh" --pack --build --restore --warnAsError false $@
diff --git a/build/repo.props b/build/repo.props
deleted file mode 100644
index 4d47fc48854..00000000000
--- a/build/repo.props
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
- true
- true
- true
- false
- false
- $(RepositoryRoot)src\Shared\src\
- $(SolutionProperties);DotNetPackageVersionPropsPath=$(DotNetPackageVersionPropsPath)
- $(SolutionProperties);DotNetAdditionalRestoreSources=$(DotNetAdditionalRestoreSources)
- $(RepositoryRoot)src\**\*.csproj
- $(RepositoryRoot)eng\NuGetPackageVerifier.json
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/eng/AspNetCore.snk b/eng/AspNetCore.snk
deleted file mode 100644
index e10e4889c12..00000000000
Binary files a/eng/AspNetCore.snk and /dev/null differ
diff --git a/eng/Build.props b/eng/Build.props
new file mode 100644
index 00000000000..6bd267a2c3b
--- /dev/null
+++ b/eng/Build.props
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 9fd8cc3d544..8b1a082fca2 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -29,6 +29,13 @@
+
+
+ 2.4.0
+ $(XUnitVersion)
+ $(XUnitVersion)
+
+
@@ -47,13 +54,13 @@
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props
index c9d70722844..8fcb5efbb29 100644
--- a/eng/ProjectReferences.props
+++ b/eng/ProjectReferences.props
@@ -56,6 +56,14 @@
+
+
+
+
+
+
+
+
diff --git a/eng/Signing.props b/eng/Signing.props
new file mode 100644
index 00000000000..1be8dc1f251
--- /dev/null
+++ b/eng/Signing.props
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/eng/Sources.props b/eng/Sources.props
deleted file mode 100644
index 28a7e2f81cc..00000000000
--- a/eng/Sources.props
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- $(DotNetRestoreSources)
-
- $(RestoreSources);
- https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json;
- https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
- https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
- https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json;
- https://api.nuget.org/v3/index.json;
-
-
- $(RestoreSources);
- $(DotNetAdditionalRestoreSources);
-
-
-
diff --git a/eng/Tools.props b/eng/Tools.props
new file mode 100644
index 00000000000..e93248a4cb7
--- /dev/null
+++ b/eng/Tools.props
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+ $(RepoRoot)eng\dotnet-install.ps1
+ $(RepoRoot)eng\dotnet-install.sh
+
+ -Architecture x64 -InstallDir $(_DotNetRoot) -Runtime dotnet -SkipNonVersionedFiles
+ --architecture x64 --install-dir $(_DotNetRoot) --runtime dotnet --skip-non-versioned-files
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/Versions.props b/eng/Versions.props
index 4c9488df605..a60ddb929bb 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -15,11 +15,6 @@
4.6.0-preview.19073.11
4.6.0-preview.19073.11
-
-
- 3.0.0-build-20190105.1
- 2.2.0-beta.19072.5
-
4.5.2
@@ -28,4 +23,58 @@
4.5.2
4.5.0
+
+ 3
+ 0
+ 0
+ $(MajorVersion).$(MinorVersion).$(PatchVersion)
+ preview
+ https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt
+ true
+ true
+
+
+ 0.1.$(PatchVersion)
+
+ true
+
+ false
+ true
+ false
+
+ $(ExperimentalVersionPrefix)
+ $(VersionPrefix)-$(PreReleaseVersionLabel)
+ $(PreReleaseVersionLabel)
+
+ $(MajorVersion).$(MinorVersion).$([MSBuild]::Subtract($(PatchVersion), 1))
+ $(VersionPrefix)-$(VersionSuffix)
+
+
+ 3.0.0-preview-27122-01
+ 1.0.0-alpha-004
+ 4.6.0-preview.18571.3
+ 2.0.3
+ 4.6.0-preview.18631.1
+ 4.7.0-preview.18631.1
+ 4.6.0-preview.18631.1
+ 4.6.0-preview.18631.1
+ 4.6.0-preview.18631.1
+ 4.5.2-servicing-27114-05
+ 4.3.2
+ 1.7.0-preview.18604.2
+ 4.6.0-preview.18604.2
+ 4.3.0
+ 4.6.0-preview.18604.2
+ 4.6.0-preview.18604.2
+ 4.6.0-preview.18604.2
+ 4.6.0-preview.18604.2
+ 4.5.0
+
+
+
+
+
+
+
+
diff --git a/eng/common/init-tools-native.sh b/eng/common/init-tools-native.sh
old mode 100644
new mode 100755
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index 4204dc14f89..8ce8dc5ca93 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -29,7 +29,7 @@
# Specifies which msbuild engine to use for build: 'vs', 'dotnet' or unspecified (determined based on presence of tools.vs in global.json).
[string]$msbuildEngine = if (Test-Path variable:msbuildEngine) { $msbuildEngine } else { $null }
-# True to attempt using .NET Core already that meets requirements specified in global.json
+# True to attempt using .NET Core already that meets requirements specified in global.json
# installed on the machine instead of downloading one.
[bool]$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true }
@@ -70,7 +70,7 @@ function Exec-Process([string]$command, [string]$commandArgs) {
$finished = $false
try {
- while (-not $process.WaitForExit(100)) {
+ while (-not $process.WaitForExit(100)) {
# Non-blocking loop done to allow ctr-c interrupts
}
@@ -171,7 +171,7 @@ function InstallDotNetSdk([string] $dotnetRoot, [string] $version) {
}
#
-# Locates Visual Studio MSBuild installation.
+# Locates Visual Studio MSBuild installation.
# The preference order for MSBuild to use is as follows:
#
# 1. MSBuild from an active VS command prompt
@@ -188,7 +188,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs }
$vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { "15.9" }
- $vsMinVersion = [Version]::new($vsMinVersionStr)
+ $vsMinVersion = [Version]::new($vsMinVersionStr)
# Try msbuild command available in the environment.
if ($env:VSINSTALLDIR -ne $null) {
@@ -232,7 +232,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
function InitializeVisualStudioEnvironmentVariables([string] $vsInstallDir, [string] $vsMajorVersion) {
$env:VSINSTALLDIR = $vsInstallDir
Set-Item "env:VS$($vsMajorVersion)0COMNTOOLS" (Join-Path $vsInstallDir "Common7\Tools\")
-
+
$vsSdkInstallDir = Join-Path $vsInstallDir "VSSDK\"
if (Test-Path $vsSdkInstallDir) {
Set-Item "env:VSSDK$($vsMajorVersion)0Install" $vsSdkInstallDir
@@ -259,13 +259,13 @@ function InstallXCopyMSBuild([string] $packageVersion) {
# Locates Visual Studio instance that meets the minimal requirements specified by tools.vs object in global.json.
#
# The following properties of tools.vs are recognized:
-# "version": "{major}.{minor}"
+# "version": "{major}.{minor}"
# Two part minimal VS version, e.g. "15.9", "16.0", etc.
-# "components": ["componentId1", "componentId2", ...]
+# "components": ["componentId1", "componentId2", ...]
# Array of ids of workload components that must be available in the VS instance.
# See e.g. https://docs.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-enterprise?view=vs-2017
#
-# Returns JSON describing the located VS instance (same format as returned by vswhere),
+# Returns JSON describing the located VS instance (same format as returned by vswhere),
# or $null if no instance meeting the requirements is found on the machine.
#
function LocateVisualStudio([object]$vsRequirements = $null){
@@ -286,7 +286,6 @@ function LocateVisualStudio([object]$vsRequirements = $null){
if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs }
$args = @("-latest", "-prerelease", "-format", "json", "-requires", "Microsoft.Component.MSBuild")
-
if (Get-Member -InputObject $vsRequirements -Name "version") {
$args += "-version"
$args += $vsRequirements.version
@@ -296,7 +295,7 @@ function LocateVisualStudio([object]$vsRequirements = $null){
foreach ($component in $vsRequirements.components) {
$args += "-requires"
$args += $component
- }
+ }
}
$vsInfo =& $vsWhereExe $args | ConvertFrom-Json
@@ -353,7 +352,7 @@ function GetDefaultMSBuildEngine() {
if (Get-Member -InputObject $GlobalJson.tools -Name "vs") {
return "vs"
}
-
+
if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") {
return "dotnet"
}
@@ -402,15 +401,15 @@ function InitializeToolset() {
$proj = Join-Path $ToolsetDir "restore.proj"
$bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "ToolsetRestore.binlog") } else { "" }
-
+
'' | Set-Content $proj
MSBuild $proj $bl /t:__WriteToolsetLocation /noconsolelogger /p:__ToolsetLocationOutputFile=$toolsetLocationFile
-
+
$path = Get-Content $toolsetLocationFile -TotalCount 1
if (!(Test-Path $path)) {
throw "Invalid toolset path: $path"
}
-
+
return $global:_ToolsetBuildProj = $path
}
@@ -448,8 +447,8 @@ function MSBuild() {
$cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse"
- if ($warnAsError) {
- $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true"
+ if ($warnAsError) {
+ $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true"
}
foreach ($arg in $args) {
@@ -457,29 +456,29 @@ function MSBuild() {
$cmdArgs += " `"$arg`""
}
}
-
+
$exitCode = Exec-Process $buildTool.Path $cmdArgs
if ($exitCode -ne 0) {
Write-Host "Build failed." -ForegroundColor Red
$buildLog = GetMSBuildBinaryLogCommandLineArgument $args
- if ($buildLog -ne $null) {
- Write-Host "See log: $buildLog" -ForegroundColor DarkGray
+ if ($buildLog -ne $null) {
+ Write-Host "See log: $buildLog" -ForegroundColor DarkGray
}
ExitWithExitCode $exitCode
}
}
-function GetMSBuildBinaryLogCommandLineArgument($arguments) {
+function GetMSBuildBinaryLogCommandLineArgument($arguments) {
foreach ($argument in $arguments) {
if ($argument -ne $null) {
$arg = $argument.Trim()
if ($arg.StartsWith("/bl:", "OrdinalIgnoreCase")) {
return $arg.Substring("/bl:".Length)
- }
-
+ }
+
if ($arg.StartsWith("/binaryLogger:", "OrdinalIgnoreCase")) {
return $arg.Substring("/binaryLogger:".Length)
}
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
old mode 100644
new mode 100755
diff --git a/eng/dotnet-install.ps1 b/eng/dotnet-install.ps1
new file mode 100644
index 00000000000..17b94a3fc85
--- /dev/null
+++ b/eng/dotnet-install.ps1
@@ -0,0 +1,588 @@
+#
+# Copyright (c) .NET Foundation and contributors. All rights reserved.
+# Licensed under the MIT license. See LICENSE file in the project root for full license information.
+#
+
+<#
+.SYNOPSIS
+ Installs dotnet cli
+.DESCRIPTION
+ Installs dotnet cli. If dotnet installation already exists in the given directory
+ it will update it only if the requested version differs from the one already installed.
+.PARAMETER Channel
+ Default: LTS
+ Download from the Channel specified. Possible values:
+ - Current - most current release
+ - LTS - most current supported release
+ - 2-part version in a format A.B - represents a specific release
+ examples: 2.0; 1.0
+ - Branch name
+ examples: release/2.0.0; Master
+.PARAMETER Version
+ Default: latest
+ Represents a build version on specific channel. Possible values:
+ - latest - most latest build on specific channel
+ - coherent - most latest coherent build on specific channel
+ coherent applies only to SDK downloads
+ - 3-part version in a format A.B.C - represents specific version of build
+ examples: 2.0.0-preview2-006120; 1.1.0
+.PARAMETER InstallDir
+ Default: %LocalAppData%\Microsoft\dotnet
+ Path to where to install dotnet. Note that binaries will be placed directly in a given directory.
+.PARAMETER Architecture
+ Default: - this value represents currently running OS architecture
+ Architecture of dotnet binaries to be installed.
+ Possible values are: , x64 and x86
+.PARAMETER SharedRuntime
+ This parameter is obsolete and may be removed in a future version of this script.
+ The recommended alternative is '-Runtime dotnet'.
+ Default: false
+ Installs just the shared runtime bits, not the entire SDK.
+ This is equivalent to specifying `-Runtime dotnet`.
+.PARAMETER Runtime
+ Installs just a shared runtime, not the entire SDK.
+ Possible values:
+ - dotnet - the Microsoft.NETCore.App shared runtime
+ - aspnetcore - the Microsoft.AspNetCore.App shared runtime
+.PARAMETER DryRun
+ If set it will not perform installation but instead display what command line to use to consistently install
+ currently requested version of dotnet cli. In example if you specify version 'latest' it will display a link
+ with specific version so that this command can be used deterministicly in a build script.
+ It also displays binaries location if you prefer to install or download it yourself.
+.PARAMETER NoPath
+ By default this script will set environment variable PATH for the current process to the binaries folder inside installation folder.
+ If set it will display binaries location but not set any environment variable.
+.PARAMETER Verbose
+ Displays diagnostics information.
+.PARAMETER AzureFeed
+ Default: https://dotnetcli.azureedge.net/dotnet
+ This parameter typically is not changed by the user.
+ It allows changing the URL for the Azure feed used by this installer.
+.PARAMETER UncachedFeed
+ This parameter typically is not changed by the user.
+ It allows changing the URL for the Uncached feed used by this installer.
+.PARAMETER FeedCredential
+ Used as a query string to append to the Azure feed.
+ It allows changing the URL to use non-public blob storage accounts.
+.PARAMETER ProxyAddress
+ If set, the installer will use the proxy when making web requests
+.PARAMETER ProxyUseDefaultCredentials
+ Default: false
+ Use default credentials, when using proxy address.
+.PARAMETER SkipNonVersionedFiles
+ Default: false
+ Skips installing non-versioned files if they already exist, such as dotnet.exe.
+.PARAMETER NoCdn
+ Disable downloading from the Azure CDN, and use the uncached feed directly.
+#>
+[cmdletbinding()]
+param(
+ [string]$Channel = "LTS",
+ [string]$Version = "Latest",
+ [string]$InstallDir = "",
+ [string]$Architecture = "",
+ [ValidateSet("dotnet", "aspnetcore", IgnoreCase = $false)]
+ [string]$Runtime,
+ [Obsolete("This parameter may be removed in a future version of this script. The recommended alternative is '-Runtime dotnet'.")]
+ [switch]$SharedRuntime,
+ [switch]$DryRun,
+ [switch]$NoPath,
+ [string]$AzureFeed = "https://dotnetcli.azureedge.net/dotnet",
+ [string]$UncachedFeed = "https://dotnetcli.blob.core.windows.net/dotnet",
+ [string]$FeedCredential,
+ [string]$ProxyAddress,
+ [switch]$ProxyUseDefaultCredentials,
+ [switch]$SkipNonVersionedFiles,
+ [switch]$NoCdn
+)
+
+Set-StrictMode -Version Latest
+$ErrorActionPreference = "Stop"
+$ProgressPreference = "SilentlyContinue"
+
+if ($NoCdn) {
+ $AzureFeed = $UncachedFeed
+}
+
+$BinFolderRelativePath = ""
+
+if ($SharedRuntime -and (-not $Runtime)) {
+ $Runtime = "dotnet"
+}
+
+# example path with regex: shared/1.0.0-beta-12345/somepath
+$VersionRegEx = "/\d+\.\d+[^/]+/"
+$OverrideNonVersionedFiles = !$SkipNonVersionedFiles
+
+function Say($str) {
+ Write-Host "dotnet-install: $str"
+}
+
+function Say-Verbose($str) {
+ Write-Verbose "dotnet-install: $str"
+}
+
+function Say-Invocation($Invocation) {
+ $command = $Invocation.MyCommand;
+ $args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ")
+ Say-Verbose "$command $args"
+}
+
+function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) {
+ $Attempts = 0
+
+ while ($true) {
+ try {
+ return $ScriptBlock.Invoke()
+ }
+ catch {
+ $Attempts++
+ if ($Attempts -lt $MaxAttempts) {
+ Start-Sleep $SecondsBetweenAttempts
+ }
+ else {
+ throw
+ }
+ }
+ }
+}
+
+function Get-Machine-Architecture() {
+ Say-Invocation $MyInvocation
+
+ # possible values: AMD64, IA64, x86
+ return $ENV:PROCESSOR_ARCHITECTURE
+}
+
+# TODO: Architecture and CLIArchitecture should be unified
+function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
+ Say-Invocation $MyInvocation
+
+ switch ($Architecture.ToLower()) {
+ { $_ -eq "" } { return Get-CLIArchitecture-From-Architecture $(Get-Machine-Architecture) }
+ { ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" }
+ { $_ -eq "x86" } { return "x86" }
+ default { throw "Architecture not supported. If you think this is a bug, please report it at https://github.com/dotnet/cli/issues" }
+ }
+}
+
+function Get-Version-Info-From-Version-Text([string]$VersionText) {
+ Say-Invocation $MyInvocation
+
+ $Data = @($VersionText.Split([char[]]@(), [StringSplitOptions]::RemoveEmptyEntries));
+
+ $VersionInfo = @{}
+ $VersionInfo.CommitHash = $Data[0].Trim()
+ $VersionInfo.Version = $Data[1].Trim()
+ return $VersionInfo
+}
+
+function Load-Assembly([string] $Assembly) {
+ try {
+ Add-Type -Assembly $Assembly | Out-Null
+ }
+ catch {
+ # On Nano Server, Powershell Core Edition is used. Add-Type is unable to resolve base class assemblies because they are not GAC'd.
+ # Loading the base class assemblies is not unnecessary as the types will automatically get resolved.
+ }
+}
+
+function GetHTTPResponse([Uri] $Uri) {
+ Invoke-With-Retry(
+ {
+
+ $HttpClient = $null
+
+ try {
+ # HttpClient is used vs Invoke-WebRequest in order to support Nano Server which doesn't support the Invoke-WebRequest cmdlet.
+ Load-Assembly -Assembly System.Net.Http
+
+ if (-not $ProxyAddress) {
+ try {
+ # Despite no proxy being explicitly specified, we may still be behind a default proxy
+ $DefaultProxy = [System.Net.WebRequest]::DefaultWebProxy;
+ if ($DefaultProxy -and (-not $DefaultProxy.IsBypassed($Uri))) {
+ $ProxyAddress = $DefaultProxy.GetProxy($Uri).OriginalString
+ $ProxyUseDefaultCredentials = $true
+ }
+ }
+ catch {
+ # Eat the exception and move forward as the above code is an attempt
+ # at resolving the DefaultProxy that may not have been a problem.
+ $ProxyAddress = $null
+ Say-Verbose("Exception ignored: $_.Exception.Message - moving forward...")
+ }
+ }
+
+ if ($ProxyAddress) {
+ $HttpClientHandler = New-Object System.Net.Http.HttpClientHandler
+ $HttpClientHandler.Proxy = New-Object System.Net.WebProxy -Property @{Address = $ProxyAddress; UseDefaultCredentials = $ProxyUseDefaultCredentials}
+ $HttpClient = New-Object System.Net.Http.HttpClient -ArgumentList $HttpClientHandler
+ }
+ else {
+
+ $HttpClient = New-Object System.Net.Http.HttpClient
+ }
+ # Default timeout for HttpClient is 100s. For a 50 MB download this assumes 500 KB/s average, any less will time out
+ # 10 minutes allows it to work over much slower connections.
+ $HttpClient.Timeout = New-TimeSpan -Minutes 10
+ $Response = $HttpClient.GetAsync("${Uri}${FeedCredential}").Result
+ if (($Response -eq $null) -or (-not ($Response.IsSuccessStatusCode))) {
+ # The feed credential is potentially sensitive info. Do not log FeedCredential to console output.
+ $ErrorMsg = "Failed to download $Uri."
+ if ($Response -ne $null) {
+ $ErrorMsg += " $Response"
+ }
+
+ throw $ErrorMsg
+ }
+
+ return $Response
+ }
+ finally {
+ if ($HttpClient -ne $null) {
+ $HttpClient.Dispose()
+ }
+ }
+ })
+}
+
+
+function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Coherent) {
+ Say-Invocation $MyInvocation
+
+ $VersionFileUrl = $null
+ if ($Runtime -eq "dotnet") {
+ $VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
+ }
+ elseif ($Runtime -eq "aspnetcore") {
+ $VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version"
+ }
+ elseif (-not $Runtime) {
+ if ($Coherent) {
+ $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.coherent.version"
+ }
+ else {
+ $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version"
+ }
+ }
+ else {
+ throw "Invalid value for `$Runtime"
+ }
+
+ $Response = GetHTTPResponse -Uri $VersionFileUrl
+ $StringContent = $Response.Content.ReadAsStringAsync().Result
+
+ switch ($Response.Content.Headers.ContentType) {
+ { ($_ -eq "application/octet-stream") } { $VersionText = $StringContent }
+ { ($_ -eq "text/plain") } { $VersionText = $StringContent }
+ { ($_ -eq "text/plain; charset=UTF-8") } { $VersionText = $StringContent }
+ default { throw "``$Response.Content.Headers.ContentType`` is an unknown .version file content type." }
+ }
+
+ $VersionInfo = Get-Version-Info-From-Version-Text $VersionText
+
+ return $VersionInfo
+}
+
+
+function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version) {
+ Say-Invocation $MyInvocation
+
+ switch ($Version.ToLower()) {
+ { $_ -eq "latest" } {
+ $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $False
+ return $LatestVersionInfo.Version
+ }
+ { $_ -eq "coherent" } {
+ $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $True
+ return $LatestVersionInfo.Version
+ }
+ default { return $Version }
+ }
+}
+
+function Get-Download-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
+ Say-Invocation $MyInvocation
+
+ if ($Runtime -eq "dotnet") {
+ $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-runtime-$SpecificVersion-win-$CLIArchitecture.zip"
+ }
+ elseif ($Runtime -eq "aspnetcore") {
+ $PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificVersion-win-$CLIArchitecture.zip"
+ }
+ elseif (-not $Runtime) {
+ $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificVersion-win-$CLIArchitecture.zip"
+ }
+ else {
+ throw "Invalid value for `$Runtime"
+ }
+
+ Say-Verbose "Constructed primary payload URL: $PayloadURL"
+
+ return $PayloadURL
+}
+
+function Get-LegacyDownload-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
+ Say-Invocation $MyInvocation
+
+ if (-not $Runtime) {
+ $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-dev-win-$CLIArchitecture.$SpecificVersion.zip"
+ }
+ elseif ($Runtime -eq "dotnet") {
+ $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-win-$CLIArchitecture.$SpecificVersion.zip"
+ }
+ else {
+ return $null
+ }
+
+ Say-Verbose "Constructed legacy payload URL: $PayloadURL"
+
+ return $PayloadURL
+}
+
+function Get-User-Share-Path() {
+ Say-Invocation $MyInvocation
+
+ $InstallRoot = $env:DOTNET_INSTALL_DIR
+ if (!$InstallRoot) {
+ $InstallRoot = "$env:LocalAppData\Microsoft\dotnet"
+ }
+ return $InstallRoot
+}
+
+function Resolve-Installation-Path([string]$InstallDir) {
+ Say-Invocation $MyInvocation
+
+ if ($InstallDir -eq "") {
+ return Get-User-Share-Path
+ }
+ return $InstallDir
+}
+
+function Get-Version-Info-From-Version-File([string]$InstallRoot, [string]$RelativePathToVersionFile) {
+ Say-Invocation $MyInvocation
+
+ $VersionFile = Join-Path -Path $InstallRoot -ChildPath $RelativePathToVersionFile
+ Say-Verbose "Local version file: $VersionFile"
+
+ if (Test-Path $VersionFile) {
+ $VersionText = cat $VersionFile
+ Say-Verbose "Local version file text: $VersionText"
+ return Get-Version-Info-From-Version-Text $VersionText
+ }
+
+ Say-Verbose "Local version file not found."
+
+ return $null
+}
+
+function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
+ Say-Invocation $MyInvocation
+
+ $DotnetPackagePath = Join-Path -Path $InstallRoot -ChildPath $RelativePathToPackage | Join-Path -ChildPath $SpecificVersion
+ Say-Verbose "Is-Dotnet-Package-Installed: Path to a package: $DotnetPackagePath"
+ return Test-Path $DotnetPackagePath -PathType Container
+}
+
+function Get-Absolute-Path([string]$RelativeOrAbsolutePath) {
+ # Too much spam
+ # Say-Invocation $MyInvocation
+
+ return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($RelativeOrAbsolutePath)
+}
+
+function Get-Path-Prefix-With-Version($path) {
+ $match = [regex]::match($path, $VersionRegEx)
+ if ($match.Success) {
+ return $entry.FullName.Substring(0, $match.Index + $match.Length)
+ }
+
+ return $null
+}
+
+function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([System.IO.Compression.ZipArchive]$Zip, [string]$OutPath) {
+ Say-Invocation $MyInvocation
+
+ $ret = @()
+ foreach ($entry in $Zip.Entries) {
+ $dir = Get-Path-Prefix-With-Version $entry.FullName
+ if ($dir -ne $null) {
+ $path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir)
+ if (-Not (Test-Path $path -PathType Container)) {
+ $ret += $dir
+ }
+ }
+ }
+
+ $ret = $ret | Sort-Object | Get-Unique
+
+ $values = ($ret | foreach { "$_" }) -join ";"
+ Say-Verbose "Directories to unpack: $values"
+
+ return $ret
+}
+
+# Example zip content and extraction algorithm:
+# Rule: files if extracted are always being extracted to the same relative path locally
+# .\
+# a.exe # file does not exist locally, extract
+# b.dll # file exists locally, override only if $OverrideFiles set
+# aaa\ # same rules as for files
+# ...
+# abc\1.0.0\ # directory contains version and exists locally
+# ... # do not extract content under versioned part
+# abc\asd\ # same rules as for files
+# ...
+# def\ghi\1.0.1\ # directory contains version and does not exist locally
+# ... # extract content
+function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
+ Say-Invocation $MyInvocation
+
+ Load-Assembly -Assembly System.IO.Compression.FileSystem
+ Set-Variable -Name Zip
+ try {
+ $Zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath)
+
+ $DirectoriesToUnpack = Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package -Zip $Zip -OutPath $OutPath
+
+ foreach ($entry in $Zip.Entries) {
+ $PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName
+ if (($PathWithVersion -eq $null) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) {
+ $DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName)
+ $DestinationDir = Split-Path -Parent $DestinationPath
+ $OverrideFiles = $OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath))
+ if ((-Not $DestinationPath.EndsWith("\")) -And $OverrideFiles) {
+ New-Item -ItemType Directory -Force -Path $DestinationDir | Out-Null
+ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $DestinationPath, $OverrideNonVersionedFiles)
+ }
+ }
+ }
+ }
+ finally {
+ if ($Zip -ne $null) {
+ $Zip.Dispose()
+ }
+ }
+}
+
+function DownloadFile([Uri]$Uri, [string]$OutPath) {
+ if ($Uri -notlike "http*") {
+ Say-Verbose "Copying file from $Uri to $OutPath"
+ Copy-Item $Uri.AbsolutePath $OutPath
+ return
+ }
+
+ $Stream = $null
+
+ try {
+ $Response = GetHTTPResponse -Uri $Uri
+ $Stream = $Response.Content.ReadAsStreamAsync().Result
+ $File = [System.IO.File]::Create($OutPath)
+ $Stream.CopyTo($File)
+ $File.Close()
+ }
+ finally {
+ if ($Stream -ne $null) {
+ $Stream.Dispose()
+ }
+ }
+}
+
+function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolderRelativePath) {
+ $BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath $BinFolderRelativePath)
+ if (-Not $NoPath) {
+ Say "Adding to current process PATH: `"$BinPath`". Note: This change will not be visible if PowerShell was run as a child process."
+ $env:path = "$BinPath;" + $env:path
+ }
+ else {
+ Say "Binaries of dotnet can be found in $BinPath"
+ }
+}
+
+$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
+$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version
+$DownloadLink = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
+$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
+
+if ($DryRun) {
+ Say "Payload URLs:"
+ Say "Primary - $DownloadLink"
+ if ($LegacyDownloadLink) {
+ Say "Legacy - $LegacyDownloadLink"
+ }
+ Say "Repeatable invocation: .\$($MyInvocation.Line)"
+ exit 0
+}
+
+$InstallRoot = Resolve-Installation-Path $InstallDir
+Say-Verbose "InstallRoot: $InstallRoot"
+
+if ($Runtime -eq "dotnet") {
+ $assetName = ".NET Core Runtime"
+ $dotnetPackageRelativePath = "shared\Microsoft.NETCore.App"
+}
+elseif ($Runtime -eq "aspnetcore") {
+ $assetName = "ASP.NET Core Runtime"
+ $dotnetPackageRelativePath = "shared\Microsoft.AspNetCore.App"
+}
+elseif (-not $Runtime) {
+ $assetName = ".NET Core SDK"
+ $dotnetPackageRelativePath = "sdk"
+}
+else {
+ throw "Invalid value for `$Runtime"
+}
+
+# Check if the SDK version is already installed.
+$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
+if ($isAssetInstalled) {
+ Say "$assetName version $SpecificVersion is already installed."
+ Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
+ exit 0
+}
+
+New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null
+
+$installDrive = $((Get-Item $InstallRoot).PSDrive.Name);
+$free = Get-CimInstance -Class win32_logicaldisk | where Deviceid -eq "${installDrive}:"
+if ($free.Freespace / 1MB -le 100 ) {
+ Say "There is not enough disk space on drive ${installDrive}:"
+ exit 0
+}
+
+$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
+Say-Verbose "Zip path: $ZipPath"
+Say "Downloading link: $DownloadLink"
+try {
+ DownloadFile -Uri $DownloadLink -OutPath $ZipPath
+}
+catch {
+ Say "Cannot download: $DownloadLink"
+ if ($LegacyDownloadLink) {
+ $DownloadLink = $LegacyDownloadLink
+ $ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
+ Say-Verbose "Legacy zip path: $ZipPath"
+ Say "Downloading legacy link: $DownloadLink"
+ DownloadFile -Uri $DownloadLink -OutPath $ZipPath
+ }
+ else {
+ throw "Could not download $assetName version $SpecificVersion"
+ }
+}
+
+Say "Extracting zip from $DownloadLink"
+Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
+
+# Check if the SDK version is now installed; if not, fail the installation.
+$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
+if (!$isAssetInstalled) {
+ throw "$assetName version $SpecificVersion failed to install with an unknown error."
+}
+
+Remove-Item $ZipPath
+
+Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
+
+Say "Installation finished"
+exit 0
\ No newline at end of file
diff --git a/eng/dotnet-install.sh b/eng/dotnet-install.sh
new file mode 100755
index 00000000000..f2fe1aa3d68
--- /dev/null
+++ b/eng/dotnet-install.sh
@@ -0,0 +1,950 @@
+#!/usr/bin/env bash
+# Copyright (c) .NET Foundation and contributors. All rights reserved.
+# Licensed under the MIT license. See LICENSE file in the project root for full license information.
+#
+
+# Stop script on NZEC
+set -e
+# Stop script if unbound variable found (use ${var:-} if intentional)
+set -u
+# By default cmd1 | cmd2 returns exit code of cmd2 regardless of cmd1 success
+# This is causing it to fail
+set -o pipefail
+
+# Use in the the functions: eval $invocation
+invocation='say_verbose "Calling: ${yellow:-}${FUNCNAME[0]} ${green:-}$*${normal:-}"'
+
+# standard output may be used as a return value in the functions
+# we need a way to write text on the screen in the functions so that
+# it won't interfere with the return value.
+# Exposing stream 3 as a pipe to standard output of the script itself
+exec 3>&1
+
+# Setup some colors to use. These need to work in fairly limited shells, like the Ubuntu Docker container where there are only 8 colors.
+# See if stdout is a terminal
+if [ -t 1 ] && command -v tput > /dev/null; then
+ # see if it supports colors
+ ncolors=$(tput colors)
+ if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then
+ bold="$(tput bold || echo)"
+ normal="$(tput sgr0 || echo)"
+ black="$(tput setaf 0 || echo)"
+ red="$(tput setaf 1 || echo)"
+ green="$(tput setaf 2 || echo)"
+ yellow="$(tput setaf 3 || echo)"
+ blue="$(tput setaf 4 || echo)"
+ magenta="$(tput setaf 5 || echo)"
+ cyan="$(tput setaf 6 || echo)"
+ white="$(tput setaf 7 || echo)"
+ fi
+fi
+
+say_warning() {
+ printf "%b\n" "${yellow:-}dotnet_install: Warning: $1${normal:-}"
+}
+
+say_err() {
+ printf "%b\n" "${red:-}dotnet_install: Error: $1${normal:-}" >&2
+}
+
+say() {
+ # using stream 3 (defined in the beginning) to not interfere with stdout of functions
+ # which may be used as return value
+ printf "%b\n" "${cyan:-}dotnet-install:${normal:-} $1" >&3
+}
+
+say_verbose() {
+ if [ "$verbose" = true ]; then
+ say "$1"
+ fi
+}
+
+# This platform list is finite - if the SDK/Runtime has supported Linux distribution-specific assets,
+# then and only then should the Linux distribution appear in this list.
+# Adding a Linux distribution to this list does not imply distribution-specific support.
+get_legacy_os_name_from_platform() {
+ eval $invocation
+
+ platform="$1"
+ case "$platform" in
+ "centos.7")
+ echo "centos"
+ return 0
+ ;;
+ "debian.8")
+ echo "debian"
+ return 0
+ ;;
+ "debian.9")
+ echo "debian.9"
+ return 0
+ ;;
+ "fedora.23")
+ echo "fedora.23"
+ return 0
+ ;;
+ "fedora.24")
+ echo "fedora.24"
+ return 0
+ ;;
+ "fedora.27")
+ echo "fedora.27"
+ return 0
+ ;;
+ "fedora.28")
+ echo "fedora.28"
+ return 0
+ ;;
+ "opensuse.13.2")
+ echo "opensuse.13.2"
+ return 0
+ ;;
+ "opensuse.42.1")
+ echo "opensuse.42.1"
+ return 0
+ ;;
+ "opensuse.42.3")
+ echo "opensuse.42.3"
+ return 0
+ ;;
+ "rhel.7"*)
+ echo "rhel"
+ return 0
+ ;;
+ "ubuntu.14.04")
+ echo "ubuntu"
+ return 0
+ ;;
+ "ubuntu.16.04")
+ echo "ubuntu.16.04"
+ return 0
+ ;;
+ "ubuntu.16.10")
+ echo "ubuntu.16.10"
+ return 0
+ ;;
+ "ubuntu.18.04")
+ echo "ubuntu.18.04"
+ return 0
+ ;;
+ "alpine.3.4.3")
+ echo "alpine"
+ return 0
+ ;;
+ esac
+ return 1
+}
+
+get_linux_platform_name() {
+ eval $invocation
+
+ if [ -n "$runtime_id" ]; then
+ echo "${runtime_id%-*}"
+ return 0
+ else
+ if [ -e /etc/os-release ]; then
+ . /etc/os-release
+ echo "$ID.$VERSION_ID"
+ return 0
+ elif [ -e /etc/redhat-release ]; then
+ local redhatRelease=$( /dev/null 2>&1
+ return $?
+}
+
+
+check_min_reqs() {
+ local hasMinimum=false
+ if machine_has "curl"; then
+ hasMinimum=true
+ elif machine_has "wget"; then
+ hasMinimum=true
+ fi
+
+ if [ "$hasMinimum" = "false" ]; then
+ say_err "curl (recommended) or wget are required to download dotnet. Install missing prerequisite to proceed."
+ return 1
+ fi
+ return 0
+}
+
+check_pre_reqs() {
+ eval $invocation
+
+ if [ "${DOTNET_INSTALL_SKIP_PREREQS:-}" = "1" ]; then
+ return 0
+ fi
+
+ if [ "$(uname)" = "Linux" ]; then
+ if [ ! -x "$(command -v ldconfig)" ]; then
+ echo "ldconfig is not in PATH, trying /sbin/ldconfig."
+ LDCONFIG_COMMAND="/sbin/ldconfig"
+ else
+ LDCONFIG_COMMAND="ldconfig"
+ fi
+
+ local librarypath=${LD_LIBRARY_PATH:-}
+ LDCONFIG_COMMAND="$LDCONFIG_COMMAND -NXv ${librarypath//:/ }"
+
+ [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep libunwind)" ] && say_warning "Unable to locate libunwind. Probable prerequisite missing; please install libunwind."
+ [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep libssl)" ] && say_warning "Unable to locate libssl. Probable prerequisite missing; please install libssl."
+ [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep libicu)" ] && say_warning "Unable to locate libicu. Probable prerequisite missing; please install libicu."
+ [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep -F libcurl.so)" ] && say_warning "Unable to locate libcurl. Probable prerequisite missing; please install libcurl."
+ fi
+
+ return 0
+}
+
+# args:
+# input - $1
+to_lowercase() {
+ #eval $invocation
+
+ echo "$1" | tr '[:upper:]' '[:lower:]'
+ return 0
+}
+
+# args:
+# input - $1
+remove_trailing_slash() {
+ #eval $invocation
+
+ local input="${1:-}"
+ echo "${input%/}"
+ return 0
+}
+
+# args:
+# input - $1
+remove_beginning_slash() {
+ #eval $invocation
+
+ local input="${1:-}"
+ echo "${input#/}"
+ return 0
+}
+
+# args:
+# root_path - $1
+# child_path - $2 - this parameter can be empty
+combine_paths() {
+ eval $invocation
+
+ # TODO: Consider making it work with any number of paths. For now:
+ if [ ! -z "${3:-}" ]; then
+ say_err "combine_paths: Function takes two parameters."
+ return 1
+ fi
+
+ local root_path="$(remove_trailing_slash "$1")"
+ local child_path="$(remove_beginning_slash "${2:-}")"
+ say_verbose "combine_paths: root_path=$root_path"
+ say_verbose "combine_paths: child_path=$child_path"
+ echo "$root_path/$child_path"
+ return 0
+}
+
+get_machine_architecture() {
+ eval $invocation
+
+ if command -v uname > /dev/null; then
+ CPUName=$(uname -m)
+ case $CPUName in
+ armv7l)
+ echo "arm"
+ return 0
+ ;;
+ aarch64)
+ echo "arm64"
+ return 0
+ ;;
+ esac
+ fi
+
+ # Always default to 'x64'
+ echo "x64"
+ return 0
+}
+
+# args:
+# architecture - $1
+get_normalized_architecture_from_architecture() {
+ eval $invocation
+
+ local architecture="$(to_lowercase "$1")"
+ case "$architecture" in
+ \)
+ echo "$(get_normalized_architecture_from_architecture "$(get_machine_architecture)")"
+ return 0
+ ;;
+ amd64|x64)
+ echo "x64"
+ return 0
+ ;;
+ arm)
+ echo "arm"
+ return 0
+ ;;
+ arm64)
+ echo "arm64"
+ return 0
+ ;;
+ esac
+
+ say_err "Architecture \`$architecture\` not supported. If you think this is a bug, please report it at https://github.com/dotnet/cli/issues"
+ return 1
+}
+
+# version_info is a conceptual two line string representing commit hash and 4-part version
+# format:
+# Line 1: # commit_hash
+# Line 2: # 4-part version
+
+# args:
+# version_text - stdin
+get_version_from_version_info() {
+ eval $invocation
+
+ cat | tail -n 1 | sed 's/\r$//'
+ return 0
+}
+
+# args:
+# version_text - stdin
+get_commit_hash_from_version_info() {
+ eval $invocation
+
+ cat | head -n 1 | sed 's/\r$//'
+ return 0
+}
+
+# args:
+# install_root - $1
+# relative_path_to_package - $2
+# specific_version - $3
+is_dotnet_package_installed() {
+ eval $invocation
+
+ local install_root="$1"
+ local relative_path_to_package="$2"
+ local specific_version="${3//[$'\t\r\n']}"
+
+ local dotnet_package_path="$(combine_paths "$(combine_paths "$install_root" "$relative_path_to_package")" "$specific_version")"
+ say_verbose "is_dotnet_package_installed: dotnet_package_path=$dotnet_package_path"
+
+ if [ -d "$dotnet_package_path" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# args:
+# azure_feed - $1
+# channel - $2
+# normalized_architecture - $3
+# coherent - $4
+get_latest_version_info() {
+ eval $invocation
+
+ local azure_feed="$1"
+ local channel="$2"
+ local normalized_architecture="$3"
+ local coherent="$4"
+
+ local version_file_url=null
+ if [[ "$runtime" == "dotnet" ]]; then
+ version_file_url="$uncached_feed/Runtime/$channel/latest.version"
+ elif [[ "$runtime" == "aspnetcore" ]]; then
+ version_file_url="$uncached_feed/aspnetcore/Runtime/$channel/latest.version"
+ elif [ -z "$runtime" ]; then
+ if [ "$coherent" = true ]; then
+ version_file_url="$uncached_feed/Sdk/$channel/latest.coherent.version"
+ else
+ version_file_url="$uncached_feed/Sdk/$channel/latest.version"
+ fi
+ else
+ say_err "Invalid value for \$runtime"
+ return 1
+ fi
+ say_verbose "get_latest_version_info: latest url: $version_file_url"
+
+ download "$version_file_url"
+ return $?
+}
+
+# args:
+# azure_feed - $1
+# channel - $2
+# normalized_architecture - $3
+# version - $4
+get_specific_version_from_version() {
+ eval $invocation
+
+ local azure_feed="$1"
+ local channel="$2"
+ local normalized_architecture="$3"
+ local version="$(to_lowercase "$4")"
+
+ case "$version" in
+ latest)
+ local version_info
+ version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1
+ say_verbose "get_specific_version_from_version: version_info=$version_info"
+ echo "$version_info" | get_version_from_version_info
+ return 0
+ ;;
+ coherent)
+ local version_info
+ version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" true)" || return 1
+ say_verbose "get_specific_version_from_version: version_info=$version_info"
+ echo "$version_info" | get_version_from_version_info
+ return 0
+ ;;
+ *)
+ echo "$version"
+ return 0
+ ;;
+ esac
+}
+
+# args:
+# azure_feed - $1
+# channel - $2
+# normalized_architecture - $3
+# specific_version - $4
+construct_download_link() {
+ eval $invocation
+
+ local azure_feed="$1"
+ local channel="$2"
+ local normalized_architecture="$3"
+ local specific_version="${4//[$'\t\r\n']}"
+
+ local osname
+ osname="$(get_current_os_name)" || return 1
+
+ local download_link=null
+ if [[ "$runtime" == "dotnet" ]]; then
+ download_link="$azure_feed/Runtime/$specific_version/dotnet-runtime-$specific_version-$osname-$normalized_architecture.tar.gz"
+ elif [[ "$runtime" == "aspnetcore" ]]; then
+ download_link="$azure_feed/aspnetcore/Runtime/$specific_version/aspnetcore-runtime-$specific_version-$osname-$normalized_architecture.tar.gz"
+ elif [ -z "$runtime" ]; then
+ download_link="$azure_feed/Sdk/$specific_version/dotnet-sdk-$specific_version-$osname-$normalized_architecture.tar.gz"
+ else
+ return 1
+ fi
+
+ echo "$download_link"
+ return 0
+}
+
+# args:
+# azure_feed - $1
+# channel - $2
+# normalized_architecture - $3
+# specific_version - $4
+construct_legacy_download_link() {
+ eval $invocation
+
+ local azure_feed="$1"
+ local channel="$2"
+ local normalized_architecture="$3"
+ local specific_version="${4//[$'\t\r\n']}"
+
+ local distro_specific_osname
+ distro_specific_osname="$(get_legacy_os_name)" || return 1
+
+ local legacy_download_link=null
+ if [[ "$runtime" == "dotnet" ]]; then
+ legacy_download_link="$azure_feed/Runtime/$specific_version/dotnet-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz"
+ elif [ -z "$runtime" ]; then
+ legacy_download_link="$azure_feed/Sdk/$specific_version/dotnet-dev-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz"
+ else
+ return 1
+ fi
+
+ echo "$legacy_download_link"
+ return 0
+}
+
+get_user_install_path() {
+ eval $invocation
+
+ if [ ! -z "${DOTNET_INSTALL_DIR:-}" ]; then
+ echo "$DOTNET_INSTALL_DIR"
+ else
+ echo "$HOME/.dotnet"
+ fi
+ return 0
+}
+
+# args:
+# install_dir - $1
+resolve_installation_path() {
+ eval $invocation
+
+ local install_dir=$1
+ if [ "$install_dir" = "" ]; then
+ local user_install_path="$(get_user_install_path)"
+ say_verbose "resolve_installation_path: user_install_path=$user_install_path"
+ echo "$user_install_path"
+ return 0
+ fi
+
+ echo "$install_dir"
+ return 0
+}
+
+# args:
+# install_root - $1
+get_installed_version_info() {
+ eval $invocation
+
+ local install_root="$1"
+ local version_file="$(combine_paths "$install_root" "$local_version_file_relative_path")"
+ say_verbose "Local version file: $version_file"
+ if [ ! -z "$version_file" ] | [ -r "$version_file" ]; then
+ local version_info="$(cat "$version_file")"
+ echo "$version_info"
+ return 0
+ fi
+
+ say_verbose "Local version file not found."
+ return 0
+}
+
+# args:
+# relative_or_absolute_path - $1
+get_absolute_path() {
+ eval $invocation
+
+ local relative_or_absolute_path=$1
+ echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
+ return 0
+}
+
+# args:
+# input_files - stdin
+# root_path - $1
+# out_path - $2
+# override - $3
+copy_files_or_dirs_from_list() {
+ eval $invocation
+
+ local root_path="$(remove_trailing_slash "$1")"
+ local out_path="$(remove_trailing_slash "$2")"
+ local override="$3"
+ local osname="$(get_current_os_name)"
+ local override_switch=$(
+ if [ "$override" = false ]; then
+ if [[ "$osname" == "linux-musl" ]]; then
+ printf -- "-u";
+ else
+ printf -- "-n";
+ fi
+ fi)
+ cat | uniq | while read -r file_path; do
+ local path="$(remove_beginning_slash "${file_path#$root_path}")"
+ local target="$out_path/$path"
+ if [ "$override" = true ] || (! ([ -d "$target" ] || [ -e "$target" ])); then
+ mkdir -p "$out_path/$(dirname "$path")"
+ cp -R $override_switch "$root_path/$path" "$target"
+ fi
+ done
+}
+# args:
+# zip_path - $1
+# out_path - $2
+extract_dotnet_package() {
+ eval $invocation
+ local zip_path="$1"
+ local out_path="$2"
+ local temp_out_path="$(mktemp -d "$temporary_file_template")"
+ local failed=false
+ tar -xzf "$zip_path" -C "$temp_out_path" > /dev/null || failed=true
+ local folders_with_version_regex='^.*/[0-9]+\.[0-9]+[^/]+/'
+ find "$temp_out_path" -type f | grep -Eo "$folders_with_version_regex" | sort | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" false
+ find "$temp_out_path" -type f | grep -Ev "$folders_with_version_regex" | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" "$override_non_versioned_files"
+ rm -rf "$temp_out_path"
+ if [ "$failed" = true ]; then
+ say_err "Extraction failed"
+ return 1
+ fi
+}
+# args:
+# remote_path - $1
+# [out_path] - $2 - stdout if not provided
+download() {
+ eval $invocation
+ local remote_path="$1"
+ local out_path="${2:-}"
+ if [[ "$remote_path" != "http"* ]]; then
+ cp "$remote_path" "$out_path"
+ return $?
+ fi
+ local failed=false
+ if machine_has "curl"; then
+ downloadcurl "$remote_path" "$out_path" || failed=true
+ elif machine_has "wget"; then
+ downloadwget "$remote_path" "$out_path" || failed=true
+ else
+ failed=true
+ fi
+ if [ "$failed" = true ]; then
+ say_verbose "Download failed: $remote_path"
+ return 1
+ fi
+ return 0
+}
+downloadcurl() {
+ eval $invocation
+ local remote_path="$1"
+ local out_path="${2:-}"
+ # Append feed_credential as late as possible before calling curl to avoid logging feed_credential
+ remote_path="${remote_path}${feed_credential}"
+ local failed=false
+ if [ -z "$out_path" ]; then
+ curl --retry 10 -sSL -f --create-dirs "$remote_path" || failed=true
+ else
+ curl --retry 10 -sSL -f --create-dirs -o "$out_path" "$remote_path" || failed=true
+ fi
+ if [ "$failed" = true ]; then
+ say_verbose "Curl download failed"
+ return 1
+ fi
+ return 0
+}
+downloadwget() {
+ eval $invocation
+ local remote_path="$1"
+ local out_path="${2:-}"
+ # Append feed_credential as late as possible before calling wget to avoid logging feed_credential
+ remote_path="${remote_path}${feed_credential}"
+ local failed=false
+ if [ -z "$out_path" ]; then
+ wget -q --tries 10 -O - "$remote_path" || failed=true
+ else
+ wget --tries 10 -O "$out_path" "$remote_path" || failed=true
+ fi
+ if [ "$failed" = true ]; then
+ say_verbose "Wget download failed"
+ return 1
+ fi
+ return 0
+}
+calculate_vars() {
+ eval $invocation
+ valid_legacy_download_link=true
+ normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")"
+ say_verbose "normalized_architecture=$normalized_architecture"
+ specific_version="$(get_specific_version_from_version "$azure_feed" "$channel" "$normalized_architecture" "$version")"
+ say_verbose "specific_version=$specific_version"
+ if [ -z "$specific_version" ]; then
+ say_err "Could not get version information."
+ return 1
+ fi
+ download_link="$(construct_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version")"
+ say_verbose "download_link=$download_link"
+ legacy_download_link="$(construct_legacy_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version")" || valid_legacy_download_link=false
+ if [ "$valid_legacy_download_link" = true ]; then
+ say_verbose "legacy_download_link=$legacy_download_link"
+ else
+ say_verbose "Cound not construct a legacy_download_link; omitting..."
+ fi
+ install_root="$(resolve_installation_path "$install_dir")"
+ say_verbose "install_root=$install_root"
+}
+install_dotnet() {
+ eval $invocation
+ local download_failed=false
+ local asset_name=''
+ local asset_relative_path=''
+ if [[ "$runtime" == "dotnet" ]]; then
+ asset_relative_path="shared/Microsoft.NETCore.App"
+ asset_name=".NET Core Runtime"
+ elif [[ "$runtime" == "aspnetcore" ]]; then
+ asset_relative_path="shared/Microsoft.AspNetCore.App"
+ asset_name="ASP.NET Core Runtime"
+ elif [ -z "$runtime" ]; then
+ asset_relative_path="sdk"
+ asset_name=".NET Core SDK"
+ else
+ say_err "Invalid value for \$runtime"
+ return 1
+ fi
+ # Check if the SDK version is already installed.
+ if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
+ say "$asset_name version $specific_version is already installed."
+ return 0
+ fi
+ mkdir -p "$install_root"
+ zip_path="$(mktemp "$temporary_file_template")"
+ say_verbose "Zip path: $zip_path"
+ say "Downloading link: $download_link"
+ # Failures are normal in the non-legacy case for ultimately legacy downloads.
+ # Do not output to stderr, since output to stderr is considered an error.
+ download "$download_link" "$zip_path" 2>&1 || download_failed=true
+ # if the download fails, download the legacy_download_link
+ if [ "$download_failed" = true ]; then
+ say "Cannot download: $download_link"
+ if [ "$valid_legacy_download_link" = true ]; then
+ download_failed=false
+ download_link="$legacy_download_link"
+ zip_path="$(mktemp "$temporary_file_template")"
+ say_verbose "Legacy zip path: $zip_path"
+ say "Downloading legacy link: $download_link"
+ download "$download_link" "$zip_path" 2>&1 || download_failed=true
+ fi
+ fi
+ if [ "$download_failed" = true ]; then
+ say_err "Could not download $asset_name version $specific_version"
+ return 1
+ fi
+ say "Extracting zip from $download_link"
+ extract_dotnet_package "$zip_path" "$install_root"
+ # Check if the SDK version is now installed; if not, fail the installation.
+ if ! is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
+ say_err "$asset_name version $specific_version failed to install with an unknown error."
+ return 1
+ fi
+ return 0
+}
+local_version_file_relative_path="/.version"
+bin_folder_relative_path=""
+temporary_file_template="${TMPDIR:-/tmp}/dotnet.XXXXXXXXX"
+channel="LTS"
+version="Latest"
+install_dir=""
+architecture=""
+dry_run=false
+no_path=false
+no_cdn=false
+azure_feed="https://dotnetcli.azureedge.net/dotnet"
+uncached_feed="https://dotnetcli.blob.core.windows.net/dotnet"
+feed_credential=""
+verbose=false
+runtime=""
+runtime_id=""
+override_non_versioned_files=true
+while [ $# -ne 0 ]
+do
+ name="$1"
+ case "$name" in
+ -c|--channel|-[Cc]hannel)
+ shift
+ channel="$1"
+ ;;
+ -v|--version|-[Vv]ersion)
+ shift
+ version="$1"
+ ;;
+ -i|--install-dir|-[Ii]nstall[Dd]ir)
+ shift
+ install_dir="$1"
+ ;;
+ --arch|--architecture|-[Aa]rch|-[Aa]rchitecture)
+ shift
+ architecture="$1"
+ ;;
+ --shared-runtime|-[Ss]hared[Rr]untime)
+ say_warning "The --shared-runtime flag is obsolete and may be removed in a future version of this script. The recommended usage is to specify '--runtime dotnet'."
+ if [ -z "$runtime" ]; then
+ runtime="dotnet"
+ fi
+ ;;
+ --runtime|-[Rr]untime)
+ shift
+ runtime="$1"
+ if [[ "$runtime" != "dotnet" ]] && [[ "$runtime" != "aspnetcore" ]]; then
+ say_err "Unsupported value for --runtime: '$1'. Valid values are 'dotnet' and 'aspnetcore'."
+ exit 1
+ fi
+ ;;
+ --dry-run|-[Dd]ry[Rr]un)
+ dry_run=true
+ ;;
+ --no-path|-[Nn]o[Pp]ath)
+ no_path=true
+ ;;
+ --verbose|-[Vv]erbose)
+ verbose=true
+ ;;
+ --no-cdn|-[Nn]o[Cc]dn)
+ no_cdn=true
+ ;;
+ --azure-feed|-[Aa]zure[Ff]eed)
+ shift
+ azure_feed="$1"
+ ;;
+ --uncached-feed|-[Uu]ncached[Ff]eed)
+ shift
+ uncached_feed="$1"
+ ;;
+ --feed-credential|-[Ff]eed[Cc]redential)
+ shift
+ feed_credential="$1"
+ ;;
+ --runtime-id|-[Rr]untime[Ii]d)
+ shift
+ runtime_id="$1"
+ ;;
+ --skip-non-versioned-files|-[Ss]kip[Nn]on[Vv]ersioned[Ff]iles)
+ override_non_versioned_files=false
+ ;;
+ -?|--?|-h|--help|-[Hh]elp)
+ script_name="$(basename "$0")"
+ echo ".NET Tools Installer"
+ echo "Usage: $script_name [-c|--channel ] [-v|--version ] [-p|--prefix ]"
+ echo " $script_name -h|-?|--help"
+ echo ""
+ echo "$script_name is a simple command line interface for obtaining dotnet cli."
+ echo ""
+ echo "Options:"
+ echo " -c,--channel Download from the channel specified, Defaults to \`$channel\`."
+ echo " -Channel"
+ echo " Possible values:"
+ echo " - Current - most current release"
+ echo " - LTS - most current supported release"
+ echo " - 2-part version in a format A.B - represents a specific release"
+ echo " examples: 2.0; 1.0"
+ echo " - Branch name"
+ echo " examples: release/2.0.0; Master"
+ echo " -v,--version Use specific VERSION, Defaults to \`$version\`."
+ echo " -Version"
+ echo " Possible values:"
+ echo " - latest - most latest build on specific channel"
+ echo " - coherent - most latest coherent build on specific channel"
+ echo " coherent applies only to SDK downloads"
+ echo " - 3-part version in a format A.B.C - represents specific version of build"
+ echo " examples: 2.0.0-preview2-006120; 1.1.0"
+ echo " -i,--install-dir Install under specified location (see Install Location below)"
+ echo " -InstallDir"
+ echo " --architecture Architecture of dotnet binaries to be installed, Defaults to \`$architecture\`."
+ echo " --arch,-Architecture,-Arch"
+ echo " Possible values: x64, arm, and arm64"
+ echo " --runtime Installs a shared runtime only, without the SDK."
+ echo " -Runtime"
+ echo " Possible values:"
+ echo " - dotnet - the Microsoft.NETCore.App shared runtime"
+ echo " - aspnetcore - the Microsoft.AspNetCore.App shared runtime"
+ echo " --skip-non-versioned-files Skips non-versioned files if they already exist, such as the dotnet executable."
+ echo " -SkipNonVersionedFiles"
+ echo " --dry-run,-DryRun Do not perform installation. Display download link."
+ echo " --no-path, -NoPath Do not set PATH for the current process."
+ echo " --verbose,-Verbose Display diagnostics information."
+ echo " --azure-feed,-AzureFeed Azure feed location. Defaults to $azure_feed, This parameter typically is not changed by the user."
+ echo " --uncached-feed,-UncachedFeed Uncached feed location. This parameter typically is not changed by the user."
+ echo " --no-cdn,-NoCdn Disable downloading from the Azure CDN, and use the uncached feed directly."
+ echo " --feed-credential,-FeedCredential Azure feed shared access token. This parameter typically is not specified."
+ echo " --runtime-id Installs the .NET Tools for the given platform (use linux-x64 for portable linux)."
+ echo " -RuntimeId"
+ echo " -?,--?,-h,--help,-Help Shows this help message"
+ echo ""
+ echo "Obsolete parameters:"
+ echo " --shared-runtime The recommended alternative is '--runtime dotnet'."
+ echo " -SharedRuntime Installs just the shared runtime bits, not the entire SDK."
+ echo ""
+ echo "Install Location:"
+ echo " Location is chosen in following order:"
+ echo " - --install-dir option"
+ echo " - Environmental variable DOTNET_INSTALL_DIR"
+ echo " - $HOME/.dotnet"
+ exit 0
+ ;;
+ *)
+ say_err "Unknown argument \`$name\`"
+ exit 1
+ ;;
+ esac
+ shift
+done
+if [ "$no_cdn" = true ]; then
+ azure_feed="$uncached_feed"
+fi
+check_min_reqs
+calculate_vars
+if [ "$dry_run" = true ]; then
+ say "Payload URL: $download_link"
+ if [ "$valid_legacy_download_link" = true ]; then
+ say "Legacy payload URL: $legacy_download_link"
+ fi
+ say "Repeatable invocation: ./$(basename "$0") --version $specific_version --channel $channel --install-dir $install_dir"
+ exit 0
+fi
+check_pre_reqs
+install_dotnet
+bin_path="$(get_absolute_path "$(combine_paths "$install_root" "$bin_folder_relative_path")")"
+if [ "$no_path" = false ]; then
+ say "Adding to current process PATH: \`$bin_path\`. Note: This change will be visible only when sourcing script."
+ export PATH="$bin_path":"$PATH"
+else
+ say "Binaries of dotnet can be found in $bin_path"
+fi
+say "Installation finished successfully."
diff --git a/eng/repo.props b/eng/repo.props
new file mode 100644
index 00000000000..f936dffb838
--- /dev/null
+++ b/eng/repo.props
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/build/repo.targets b/eng/repo.targets
similarity index 68%
rename from build/repo.targets
rename to eng/repo.targets
index 6694fa5ab4e..1ad51445c5f 100644
--- a/build/repo.targets
+++ b/eng/repo.targets
@@ -1,4 +1,8 @@
+
+
+
+
@@ -28,7 +32,7 @@
$(MSBuildThisFileDirectory)..\eng\ProjectReferences.props
+
@(_ProjectReferenceProvider->'', '%0A ')
@@ -40,4 +44,21 @@
+
+
+
+ <_Temp Remove="@(_Temp)" />
+ <_Temp Include="@(ProjectToBuild)"/>
+
+
+
+
+
+
+
+
+
+ @(ProjectToBuild->'%(FullPath)')
+
+
diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets
index b3e4a4fff7f..07c3db8aeb0 100644
--- a/eng/targets/ResolveReferences.targets
+++ b/eng/targets/ResolveReferences.targets
@@ -34,7 +34,6 @@
<_ImplicitPackageReference Include="@(PackageReference->WithMetadataValue('IsImplicitlyDefined', 'true'))" />
<_ExplicitPackageReference Include="@(PackageReference)" Exclude="@(_ImplicitPackageReference)" />
- <_ExplicitPackageReference Remove="Internal.AspNetCore.Sdk" />
diff --git a/eng/templates/default-build.yml b/eng/templates/default-build.yml
deleted file mode 100644
index b2b444e4af3..00000000000
--- a/eng/templates/default-build.yml
+++ /dev/null
@@ -1,135 +0,0 @@
-# default-build.yml
-#
-# Description: Defines a build phase for invoking build.sh/cmd
-#
-# Parameters:
-# configuration: string
-# Release or Debug
-# agentOs: string
-# Used in templates to define variables which are OS specific. Typically from the set { Windows, Linux, macOS }
-# buildArgs: string
-# Additional arguments to pass to the build.sh/cmd script.
-# Note: -ci is always passed
-# artifacts:
-# publish: boolean
-# Should artifacts be published
-# path: string
-# The file path to artifacts output
-# name: string
-# The name of the artifact container
-# codeSign: boolean
-# This build definition is enabled for code signing. (Only applies to Windows)
-
-#
-# See https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema for details
-#
-
-parameters:
- agentOs: 'Windows'
- poolName: ''
- buildArgs: ''
- configuration: 'Release'
- codeSign: false
- publishToBar: false
- artifacts:
- publish: false
- name: ''
- path: 'artifacts/'
-
-jobs:
-- job: ${{ parameters.agentOs }}
- # Double the default timeout. Publishing is subject to huge delays due to contention on the dotnet-core blob feed
- timeoutInMinutes: 120
- workspace:
- clean: all
- # Map friendly OS names to the right queue
- # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md
- pool:
- ${{ if and(eq(parameters.poolName, ''), eq(parameters.agentOs, 'macOS')) }}:
- name: Hosted macOS
- vmImage: macOS-10.13
- ${{ if and(eq(parameters.poolName, ''), eq(parameters.agentOs, 'Linux')) }}:
- name: Hosted Ubuntu 1604
- vmImage: ubuntu-16.04
- ${{ if and(eq(parameters.poolName, ''), eq(parameters.agentOs, 'Windows')) }}:
- ${{ if ne(variables['System.TeamProject'], 'internal') }}:
- name: Hosted VS2017
- vmImage: vs2017-win2016
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- name: dotnet-internal-temp
- variables:
- - name: KOREBUILD_KEEPGLOBALJSON
- value: 1
- - name: AgentOsName
- value: ${{ parameters.agentOs }}
- - name: ASPNETCORE_TEST_LOG_MAXPATH
- value: "200" # Keep test log file name length low enough for artifact zipping
- - name: DOTNET_HOME
- value: $(Agent.WorkFolder)/.dotnet
- - name: BuildScriptArgs
- value: ${{ parameters.buildArgs }}
- - name: BuildConfiguration
- value: ${{ parameters.configuration }}
- - name: VSTS_OVERWRITE_TEMP
- value: false # Workaround for https://github.com/dotnet/core-eng/issues/2812
- - ${{ if or(ne(parameters.codeSign, 'true'), ne(variables['System.TeamProject'], 'internal')) }}:
- - name: _SignType
- value: ''
- - ${{ if and(eq(parameters.codeSign, 'true'), eq(variables['System.TeamProject'], 'internal')) }}:
- - name: TeamName
- value: AspNetCore
- - name: _SignType
- value: real
- - group: DotNet-Blob-Feed
- steps:
- - checkout: self
- clean: true
- - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}:
- - task: MicroBuildSigningPlugin@1
- displayName: Install MicroBuild Signing plugin
- condition: and(succeeded(), in(variables['_SignType'], 'test', 'real'))
- inputs:
- signType: $(_SignType)
- zipSources: false
- feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - script: .\build.cmd -ci /p:SignType=$(_SignType) /p:Configuration=$(BuildConfiguration) $(BuildScriptArgs)
- displayName: Run build.cmd
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: ./build.sh -ci -p:Configuration=$(BuildConfiguration) $(BuildScriptArgs)
- displayName: Run build.sh
- - task: PublishTestResults@2
- displayName: Publish test results
- condition: always()
- inputs:
- testRunTitle: $(AgentOsName)-$(BuildConfiguration)
- testRunner: vstest
- testResultsFiles: 'artifacts/logs/**/*.trx'
- mergeTestResults: true
- - ${{ if eq(parameters.artifacts.publish, 'true') }}:
- - task: PublishBuildArtifacts@1
- displayName: Upload artifacts
- condition: eq(variables['system.pullrequest.isfork'], false)
- inputs:
- pathtoPublish: ${{ parameters.artifacts.path }}
- ${{ if eq(parameters.artifacts.name, '') }}:
- artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration)
- ${{ if ne(parameters.artifacts.name, '') }}:
- artifactName: ${{ parameters.artifacts.name }}
- artifactType: Container
- parallel: true
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.publishToBar, 'true')) }}:
- - script: build.cmd -ci /t:PublishToBAR /p:AzureAccountKey=$(dotnetfeed-storage-access-key-1) /p:AzureFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json /p:DotNetPublishToBlobFeed=true
- displayName: Publish packages to dotnet-core feed
- - task: AzureKeyVault@1
- inputs:
- azureSubscription: 'DotNet-Engineering-Services_KeyVault'
- KeyVaultName: EngKeyVault
- SecretsFilter: 'MaestroAccessToken'
- displayName: Fetch secrets from KeyVault
- - script: eng\common\publishbuildassets.cmd /p:ManifestsPath='$(Build.SourcesDirectory)/artifacts/AssetManifest/' /p:BuildAssetRegistryToken=$(MaestroAccessToken) /p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com /p:Configuration=$(BuildConfiguration)
- displayName: Register Build Assets with Maestro
- - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(parameters.agentOs, 'Windows')) }}:
- - task: MicroBuildCleanup@1
- displayName: Cleanup MicroBuild tasks
- condition: always()
diff --git a/eng/tools/BaselineGenerator/BaselineGenerator.csproj b/eng/tools/BaselineGenerator/BaselineGenerator.csproj
index cdf623fc682..23c39b7730f 100644
--- a/eng/tools/BaselineGenerator/BaselineGenerator.csproj
+++ b/eng/tools/BaselineGenerator/BaselineGenerator.csproj
@@ -1,5 +1,4 @@
-
Exe
netcoreapp2.1
diff --git a/eng/tools/Directory.Build.props b/eng/tools/Directory.Build.props
index ed56064c9c1..b4e8ffffd89 100644
--- a/eng/tools/Directory.Build.props
+++ b/eng/tools/Directory.Build.props
@@ -1,3 +1,3 @@
-
+
diff --git a/korebuild-lock.txt b/korebuild-lock.txt
deleted file mode 100644
index af862c80b06..00000000000
--- a/korebuild-lock.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-version:3.0.0-build-20190105.1
-commithash:f61a6ea29c9697719acc53326726dfbe7acee915
diff --git a/korebuild.json b/korebuild.json
deleted file mode 100644
index 8a276a7f35d..00000000000
--- a/korebuild.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json",
- "channel": "master"
-}
diff --git a/src/Caching/Abstractions/Directory.Build.props b/src/Caching/Abstractions/Directory.Build.props
index f25c1d90ce8..e97b192d02f 100644
--- a/src/Caching/Abstractions/Directory.Build.props
+++ b/src/Caching/Abstractions/Directory.Build.props
@@ -3,5 +3,6 @@
true
+ true
diff --git a/src/Caching/Memory/src/Microsoft.Extensions.Caching.Memory.csproj b/src/Caching/Memory/src/Microsoft.Extensions.Caching.Memory.csproj
index 10c48ef6da8..e8b9e95dc8c 100644
--- a/src/Caching/Memory/src/Microsoft.Extensions.Caching.Memory.csproj
+++ b/src/Caching/Memory/src/Microsoft.Extensions.Caching.Memory.csproj
@@ -6,8 +6,13 @@
$(NoWarn);CS1591
true
cache;memorycache
+ true
+
+
+
+
diff --git a/src/Caching/Memory/src/Properties/AssemblyInfo.cs b/src/Caching/Memory/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 4f93c2ee4b4..00000000000
--- a/src/Caching/Memory/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Caching.Memory.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj b/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj
index b69c94d293a..fb118c1a30a 100644
--- a/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj
+++ b/src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj
@@ -9,8 +9,13 @@
false
+ true
+
+
+
+
diff --git a/src/Caching/SqlServer/src/Properties/AssemblyInfo.cs b/src/Caching/SqlServer/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 61f046388ca..00000000000
--- a/src/Caching/SqlServer/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Reflection;
-using System.Resources;
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Caching.SqlServer.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj b/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj
index eb6c5d2a8cb..f972f80c7e6 100644
--- a/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj
+++ b/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj
@@ -6,6 +6,7 @@
$(NoWarn);CS1591
true
cache;distributedcache;redis
+ true
diff --git a/src/Configuration/Config.Abstractions/src/Microsoft.Extensions.Configuration.Abstractions.csproj b/src/Configuration/Config.Abstractions/src/Microsoft.Extensions.Configuration.Abstractions.csproj
index 8462647cc69..5497a435643 100644
--- a/src/Configuration/Config.Abstractions/src/Microsoft.Extensions.Configuration.Abstractions.csproj
+++ b/src/Configuration/Config.Abstractions/src/Microsoft.Extensions.Configuration.Abstractions.csproj
@@ -9,6 +9,7 @@ Microsoft.Extensions.Configuration.IConfigurationBuilder
Microsoft.Extensions.Configuration.IConfigurationProvider
Microsoft.Extensions.Configuration.IConfigurationRoot
Microsoft.Extensions.Configuration.IConfigurationSection
+ true
diff --git a/src/Configuration/Config.AzureKeyVault/src/Microsoft.Extensions.Configuration.AzureKeyVault.csproj b/src/Configuration/Config.AzureKeyVault/src/Microsoft.Extensions.Configuration.AzureKeyVault.csproj
index 2510f0982fd..a108e5156bc 100644
--- a/src/Configuration/Config.AzureKeyVault/src/Microsoft.Extensions.Configuration.AzureKeyVault.csproj
+++ b/src/Configuration/Config.AzureKeyVault/src/Microsoft.Extensions.Configuration.AzureKeyVault.csproj
@@ -4,8 +4,13 @@
Azure KeyVault configuration provider implementation for Microsoft.Extensions.Configuration.
netstandard2.0
$(PackageTags);azure;keyvault
+ true
+
+
+
+
diff --git a/src/Configuration/Config.AzureKeyVault/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.AzureKeyVault/src/Properties/AssemblyInfo.cs
index 4680acb1dc7..d77af5dc957 100644
--- a/src/Configuration/Config.AzureKeyVault/src/Properties/AssemblyInfo.cs
+++ b/src/Configuration/Config.AzureKeyVault/src/Properties/AssemblyInfo.cs
@@ -1,8 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
using System.Runtime.CompilerServices;
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.AzureKeyVault.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
+[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/Configuration/Config.Binder/src/Microsoft.Extensions.Configuration.Binder.csproj b/src/Configuration/Config.Binder/src/Microsoft.Extensions.Configuration.Binder.csproj
index c9907e5cb95..e966d7790cf 100644
--- a/src/Configuration/Config.Binder/src/Microsoft.Extensions.Configuration.Binder.csproj
+++ b/src/Configuration/Config.Binder/src/Microsoft.Extensions.Configuration.Binder.csproj
@@ -3,8 +3,13 @@
Functionality to bind an object to data in configuration providers for Microsoft.Extensions.Configuration.
netstandard2.0
+ true
+
+
+
+
diff --git a/src/Configuration/Config.Binder/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.Binder/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 0b09b6109b0..00000000000
--- a/src/Configuration/Config.Binder/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.Binder.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Config.CommandLine/src/Microsoft.Extensions.Configuration.CommandLine.csproj b/src/Configuration/Config.CommandLine/src/Microsoft.Extensions.Configuration.CommandLine.csproj
index 01333469a72..40735c8422f 100644
--- a/src/Configuration/Config.CommandLine/src/Microsoft.Extensions.Configuration.CommandLine.csproj
+++ b/src/Configuration/Config.CommandLine/src/Microsoft.Extensions.Configuration.CommandLine.csproj
@@ -4,8 +4,13 @@
Command line configuration provider implementation for Microsoft.Extensions.Configuration.
netstandard2.0
$(PackageTags);commandline
+ true
+
+
+
+
diff --git a/src/Configuration/Config.CommandLine/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.CommandLine/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index cbed6537583..00000000000
--- a/src/Configuration/Config.CommandLine/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.CommandLine.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Config.EnvironmentVariables/src/Microsoft.Extensions.Configuration.EnvironmentVariables.csproj b/src/Configuration/Config.EnvironmentVariables/src/Microsoft.Extensions.Configuration.EnvironmentVariables.csproj
index 33501d496f1..be6017a3f39 100644
--- a/src/Configuration/Config.EnvironmentVariables/src/Microsoft.Extensions.Configuration.EnvironmentVariables.csproj
+++ b/src/Configuration/Config.EnvironmentVariables/src/Microsoft.Extensions.Configuration.EnvironmentVariables.csproj
@@ -4,8 +4,13 @@
Environment variables configuration provider implementation for Microsoft.Extensions.Configuration.
netstandard2.0
$(PackageTags);envvar;environmentvariable
+ true
+
+
+
+
diff --git a/src/Configuration/Config.EnvironmentVariables/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.EnvironmentVariables/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 26f9f3e3a93..00000000000
--- a/src/Configuration/Config.EnvironmentVariables/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.EnvironmentVariables.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Config.FileExtensions/src/Microsoft.Extensions.Configuration.FileExtensions.csproj b/src/Configuration/Config.FileExtensions/src/Microsoft.Extensions.Configuration.FileExtensions.csproj
index af8591bb097..dc0c7536b61 100644
--- a/src/Configuration/Config.FileExtensions/src/Microsoft.Extensions.Configuration.FileExtensions.csproj
+++ b/src/Configuration/Config.FileExtensions/src/Microsoft.Extensions.Configuration.FileExtensions.csproj
@@ -3,8 +3,13 @@
Extension methods for configuring file-based configuration providers for Microsoft.Extensions.Configuration.
netstandard2.0
+ true
+
+
+
+
diff --git a/src/Configuration/Config.FileExtensions/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.FileExtensions/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 14a9dc7a3df..00000000000
--- a/src/Configuration/Config.FileExtensions/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.FileExtensions.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Config.Ini/src/Microsoft.Extensions.Configuration.Ini.csproj b/src/Configuration/Config.Ini/src/Microsoft.Extensions.Configuration.Ini.csproj
index 8c0032d6539..39533f64e59 100644
--- a/src/Configuration/Config.Ini/src/Microsoft.Extensions.Configuration.Ini.csproj
+++ b/src/Configuration/Config.Ini/src/Microsoft.Extensions.Configuration.Ini.csproj
@@ -4,8 +4,13 @@
INI configuration provider implementation for Microsoft.Extensions.Configuration.
netstandard2.0
$(PackageTags);ini
+ true
+
+
+
+
diff --git a/src/Configuration/Config.Ini/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.Ini/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 643b15312a1..00000000000
--- a/src/Configuration/Config.Ini/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.Ini.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Config.Json/src/Microsoft.Extensions.Configuration.Json.csproj b/src/Configuration/Config.Json/src/Microsoft.Extensions.Configuration.Json.csproj
index 967200081fe..fd79783bdef 100644
--- a/src/Configuration/Config.Json/src/Microsoft.Extensions.Configuration.Json.csproj
+++ b/src/Configuration/Config.Json/src/Microsoft.Extensions.Configuration.Json.csproj
@@ -4,8 +4,13 @@
JSON configuration provider implementation for Microsoft.Extensions.Configuration.
netstandard2.0
$(PackageTags);json
+ true
+
+
+
+
diff --git a/src/Configuration/Config.Json/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.Json/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index fd57c913fea..00000000000
--- a/src/Configuration/Config.Json/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.Json.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Config.KeyPerFile/src/Microsoft.Extensions.Configuration.KeyPerFile.csproj b/src/Configuration/Config.KeyPerFile/src/Microsoft.Extensions.Configuration.KeyPerFile.csproj
index 4eb19f32937..82784d0eed8 100644
--- a/src/Configuration/Config.KeyPerFile/src/Microsoft.Extensions.Configuration.KeyPerFile.csproj
+++ b/src/Configuration/Config.KeyPerFile/src/Microsoft.Extensions.Configuration.KeyPerFile.csproj
@@ -4,6 +4,7 @@
Configuration provider that uses files in a directory for Microsoft.Extensions.Configuration.
netstandard2.0
false
+ true
diff --git a/src/Configuration/Config.UserSecrets/src/Microsoft.Extensions.Configuration.UserSecrets.csproj b/src/Configuration/Config.UserSecrets/src/Microsoft.Extensions.Configuration.UserSecrets.csproj
index ef913550a38..8705a3fe8fc 100644
--- a/src/Configuration/Config.UserSecrets/src/Microsoft.Extensions.Configuration.UserSecrets.csproj
+++ b/src/Configuration/Config.UserSecrets/src/Microsoft.Extensions.Configuration.UserSecrets.csproj
@@ -4,8 +4,13 @@
User secrets configuration provider implementation for Microsoft.Extensions.Configuration.
netstandard2.0
$(PackageTags);secrets;usersecrets
+ true
+
+
+
+
diff --git a/src/Configuration/Config.UserSecrets/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.UserSecrets/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 74683a8406b..00000000000
--- a/src/Configuration/Config.UserSecrets/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.UserSecrets.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/Configuration/Config.UserSecrets/test/MsBuildTargetTest.cs b/src/Configuration/Config.UserSecrets/test/MsBuildTargetTest.cs
index 020318d7d57..595da49cd84 100644
--- a/src/Configuration/Config.UserSecrets/test/MsBuildTargetTest.cs
+++ b/src/Configuration/Config.UserSecrets/test/MsBuildTargetTest.cs
@@ -95,6 +95,21 @@ open System
break;
}
+ foreach (var file in new[] { Path.Join(_tempDir, "Directory.Build.props"), Path.Join(_tempDir, "Directory.Build.targets") })
+ {
+ if (!File.Exists(file))
+ {
+ using (var fileStream = File.CreateText(file))
+ {
+ fileStream.WriteLine(@"
+
+
+
+");
+ }
+ }
+ }
+
var assemblyInfoFile = Path.Combine(_tempDir, $"obj/Debug/{testTfm}/test.AssemblyInfo" + sourceExt);
AssertDotNet("restore");
@@ -103,7 +118,7 @@ open System
AssertDotNet("build --configuration Debug");
- Assert.True(File.Exists(assemblyInfoFile), $"{assemblyInfoFile} should not exist but does not");
+ Assert.True(File.Exists(assemblyInfoFile), $"{assemblyInfoFile} should exist but does not");
var contents = File.ReadAllText(assemblyInfoFile);
Assert.Contains("assembly: Microsoft.Extensions.Configuration.UserSecrets.UserSecretsIdAttribute(\"xyz123\")", contents);
var lastWrite = new FileInfo(assemblyInfoFile).LastWriteTimeUtc;
@@ -134,10 +149,12 @@ void LogData(object obj, DataReceivedEventArgs e)
StartInfo = processInfo
};
process.OutputDataReceived += LogData;
+ process.ErrorDataReceived += LogData;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
process.OutputDataReceived -= LogData;
+ process.ErrorDataReceived -= LogData;
Assert.Equal(0, process.ExitCode);
}
diff --git a/src/Configuration/Config.Xml/src/Microsoft.Extensions.Configuration.Xml.csproj b/src/Configuration/Config.Xml/src/Microsoft.Extensions.Configuration.Xml.csproj
index 7fdc3bdd1de..c7b0436f803 100644
--- a/src/Configuration/Config.Xml/src/Microsoft.Extensions.Configuration.Xml.csproj
+++ b/src/Configuration/Config.Xml/src/Microsoft.Extensions.Configuration.Xml.csproj
@@ -4,8 +4,13 @@
XML configuration provider implementation for Microsoft.Extensions.Configuration.
netstandard2.0
$(PackageTags);xml
+ true
+
+
+
+
@@ -13,4 +18,3 @@
-
diff --git a/src/Configuration/Config.Xml/src/Properties/AssemblyInfo.cs b/src/Configuration/Config.Xml/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 0167d5f561d..00000000000
--- a/src/Configuration/Config.Xml/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.Xml.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Config/src/Microsoft.Extensions.Configuration.csproj b/src/Configuration/Config/src/Microsoft.Extensions.Configuration.csproj
index 206aeb9f4a1..3d43b315b11 100644
--- a/src/Configuration/Config/src/Microsoft.Extensions.Configuration.csproj
+++ b/src/Configuration/Config/src/Microsoft.Extensions.Configuration.csproj
@@ -3,8 +3,13 @@
Implementation of key-value pair based configuration for Microsoft.Extensions.Configuration. Includes the memory configuration provider.
netstandard2.0
+ true
+
+
+
+
diff --git a/src/Configuration/Config/src/Properties/AssemblyInfo.cs b/src/Configuration/Config/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7e380883e02..00000000000
--- a/src/Configuration/Config/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-
diff --git a/src/Configuration/Directory.Build.props b/src/Configuration/Directory.Build.props
index 2082380096b..fe35a9faec6 100644
--- a/src/Configuration/Directory.Build.props
+++ b/src/Configuration/Directory.Build.props
@@ -2,7 +2,7 @@
- true
+ true
configuration
diff --git a/src/DependencyInjection/DI.Abstractions/src/Microsoft.Extensions.DependencyInjection.Abstractions.csproj b/src/DependencyInjection/DI.Abstractions/src/Microsoft.Extensions.DependencyInjection.Abstractions.csproj
index f25f0b81919..fe4826538fb 100644
--- a/src/DependencyInjection/DI.Abstractions/src/Microsoft.Extensions.DependencyInjection.Abstractions.csproj
+++ b/src/DependencyInjection/DI.Abstractions/src/Microsoft.Extensions.DependencyInjection.Abstractions.csproj
@@ -8,8 +8,13 @@ Microsoft.Extensions.DependencyInjection.IServiceCollection
true
dependencyinjection;di
$(DefineConstants);ActivatorUtilities_In_DependencyInjection
+ true
+
+
+
+
diff --git a/src/DependencyInjection/DI.Abstractions/src/Properties/AssemblyInfo.cs b/src/DependencyInjection/DI.Abstractions/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7586e5bfdad..00000000000
--- a/src/DependencyInjection/DI.Abstractions/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.DependencyInjection.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/DependencyInjection/DI.Specification.Tests/Directory.Build.props b/src/DependencyInjection/DI.Specification.Tests/Directory.Build.props
index f25c1d90ce8..6acc2b26b36 100644
--- a/src/DependencyInjection/DI.Specification.Tests/Directory.Build.props
+++ b/src/DependencyInjection/DI.Specification.Tests/Directory.Build.props
@@ -3,5 +3,7 @@
true
+ false
+ false
diff --git a/src/DependencyInjection/DI.Specification.Tests/src/ActivatorUtilitiesTests.cs b/src/DependencyInjection/DI.Specification.Tests/src/ActivatorUtilitiesTests.cs
index a9798e05fc1..8ee67cbbc55 100644
--- a/src/DependencyInjection/DI.Specification.Tests/src/ActivatorUtilitiesTests.cs
+++ b/src/DependencyInjection/DI.Specification.Tests/src/ActivatorUtilitiesTests.cs
@@ -111,9 +111,9 @@ public void TypeActivatorWorksWithCtorWithOptionalArgs_WithStructDefaults(Create
// Assert
Assert.NotNull(anotherClass);
Assert.Equal(ConsoleColor.DarkGreen, anotherClass.Color);
- Assert.Equal(null, anotherClass.ColorNull);
+ Assert.Null(anotherClass.ColorNull);
Assert.Equal(12, anotherClass.Integer);
- Assert.Equal(null, anotherClass.IntegerNull);
+ Assert.Null(anotherClass.IntegerNull);
}
[Theory]
@@ -248,7 +248,7 @@ public void TypeActivatorUsesMarkedConstructor(CreateInstanceFunc createFunc)
public void TypeActivatorThrowsOnMultipleMarkedCtors(CreateInstanceFunc createFunc)
{
// Act
- var exception = Assert.Throws(() => CreateInstance(createFunc, null, "hello"));
+ var exception = Assert.Throws(() => CreateInstance(createFunc, null, "hello"));
// Assert
Assert.Equal("Multiple constructors were marked with ActivatorUtilitiesConstructorAttribute.", exception.Message);
@@ -259,7 +259,7 @@ public void TypeActivatorThrowsOnMultipleMarkedCtors(CreateInstanceFunc createFu
public void TypeActivatorThrowsWhenMarkedCtorDoesntAcceptArguments(CreateInstanceFunc createFunc)
{
// Act
- var exception = Assert.Throws(() => CreateInstance(createFunc, null, 0, "hello"));
+ var exception = Assert.Throws(() => CreateInstance(createFunc, null, 0, "hello"));
// Assert
Assert.Equal("Constructor marked with ActivatorUtilitiesConstructorAttribute does not accept all given argument types.", exception.Message);
diff --git a/src/DependencyInjection/DI.Specification.Tests/src/Microsoft.Extensions.DependencyInjection.Specification.Tests.csproj b/src/DependencyInjection/DI.Specification.Tests/src/Microsoft.Extensions.DependencyInjection.Specification.Tests.csproj
index 2a39e8a61a6..0731f2e828e 100644
--- a/src/DependencyInjection/DI.Specification.Tests/src/Microsoft.Extensions.DependencyInjection.Specification.Tests.csproj
+++ b/src/DependencyInjection/DI.Specification.Tests/src/Microsoft.Extensions.DependencyInjection.Specification.Tests.csproj
@@ -11,7 +11,10 @@
https://github.com/dotnet/corefx/issues/12338 & https://github.com/dotnet/corefx/issues/11797
-->
false
+ false
false
+
+ true
@@ -22,5 +25,4 @@
-
diff --git a/src/DependencyInjection/DI/src/Microsoft.Extensions.DependencyInjection.csproj b/src/DependencyInjection/DI/src/Microsoft.Extensions.DependencyInjection.csproj
index 394dc76e0d5..1f3566bd15a 100644
--- a/src/DependencyInjection/DI/src/Microsoft.Extensions.DependencyInjection.csproj
+++ b/src/DependencyInjection/DI/src/Microsoft.Extensions.DependencyInjection.csproj
@@ -5,6 +5,7 @@
netcoreapp3.0;net461;netstandard2.0
true
dependencyinjection;di
+ true
True
$(DefineConstants);IL_EMIT
@@ -15,6 +16,11 @@
$(DefineConstants);SAVE_ASSEMBLIES
+
+
+
+
+
diff --git a/src/DependencyInjection/DI/src/Properties/AssemblyInfo.cs b/src/DependencyInjection/DI/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 4afefbd651e..00000000000
--- a/src/DependencyInjection/DI/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.DependencyInjection.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.Extensions.DependencyInjection.Performance, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/DiagnosticAdapter/src/Microsoft.Extensions.DiagnosticAdapter.csproj b/src/DiagnosticAdapter/src/Microsoft.Extensions.DiagnosticAdapter.csproj
index 7f165d5b865..43911084cea 100644
--- a/src/DiagnosticAdapter/src/Microsoft.Extensions.DiagnosticAdapter.csproj
+++ b/src/DiagnosticAdapter/src/Microsoft.Extensions.DiagnosticAdapter.csproj
@@ -6,8 +6,14 @@
$(NoWarn);CS1591
true
diagnosticadapter;diagnosticlistener;diagnostics
+ true
+
+
+
+
+
diff --git a/src/DiagnosticAdapter/src/Properties/AssemblyInfo.cs b/src/DiagnosticAdapter/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index eb7a8d8a9a9..00000000000
--- a/src/DiagnosticAdapter/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.DiagnosticAdapter.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/FileProviders/Abstractions/src/Microsoft.Extensions.FileProviders.Abstractions.csproj b/src/FileProviders/Abstractions/src/Microsoft.Extensions.FileProviders.Abstractions.csproj
index 1ba11387eb4..0d2537f5d02 100644
--- a/src/FileProviders/Abstractions/src/Microsoft.Extensions.FileProviders.Abstractions.csproj
+++ b/src/FileProviders/Abstractions/src/Microsoft.Extensions.FileProviders.Abstractions.csproj
@@ -8,6 +8,7 @@ Microsoft.Extensions.FileProviders.IDirectoryContents
Microsoft.Extensions.FileProviders.IFileInfo
Microsoft.Extensions.FileProviders.IFileProvider
netstandard2.0
+ true
diff --git a/src/FileProviders/Composite/src/Microsoft.Extensions.FileProviders.Composite.csproj b/src/FileProviders/Composite/src/Microsoft.Extensions.FileProviders.Composite.csproj
index c62b87af880..b96e7951271 100644
--- a/src/FileProviders/Composite/src/Microsoft.Extensions.FileProviders.Composite.csproj
+++ b/src/FileProviders/Composite/src/Microsoft.Extensions.FileProviders.Composite.csproj
@@ -4,6 +4,7 @@
Microsoft.Extensions.FileProviders
Composite file and directory providers for Microsoft.Extensions.FileProviders.
netstandard2.0
+ true
diff --git a/src/FileProviders/Composite/test/Microsoft.Extensions.FileProviders.Composite.Tests.csproj b/src/FileProviders/Composite/test/Microsoft.Extensions.FileProviders.Composite.Tests.csproj
index 73db507fe71..58643969948 100644
--- a/src/FileProviders/Composite/test/Microsoft.Extensions.FileProviders.Composite.Tests.csproj
+++ b/src/FileProviders/Composite/test/Microsoft.Extensions.FileProviders.Composite.Tests.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/src/FileProviders/Directory.Build.props b/src/FileProviders/Directory.Build.props
index bf4410dcb77..709c47ddbd7 100644
--- a/src/FileProviders/Directory.Build.props
+++ b/src/FileProviders/Directory.Build.props
@@ -2,7 +2,7 @@
- true
+ true
files;filesystem
diff --git a/src/FileProviders/Embedded/src/Microsoft.Extensions.FileProviders.Embedded.csproj b/src/FileProviders/Embedded/src/Microsoft.Extensions.FileProviders.Embedded.csproj
index e8dd5d85dd0..90cb2e4cc33 100644
--- a/src/FileProviders/Embedded/src/Microsoft.Extensions.FileProviders.Embedded.csproj
+++ b/src/FileProviders/Embedded/src/Microsoft.Extensions.FileProviders.Embedded.csproj
@@ -5,8 +5,13 @@
File provider for files in embedded resources for Microsoft.Extensions.FileProviders.
netstandard2.0
$(MSBuildProjectName).nuspec
+ true
+
+
+
+
@@ -18,7 +23,6 @@
-
id=$(PackageId);
@@ -40,10 +44,9 @@
OutputDocumentation=@(DocumentationProjectOutputGroupOutput);
- TaskAssemblyNetStandard=..\..\Manifest.MSBuildTask\src\bin\$(Configuration)\netstandard2.0\$(AssemblyName).Manifest.Task.dll;
- TaskSymbolNetStandard=..\..\Manifest.MSBuildTask\src\bin\$(Configuration)\netstandard2.0\$(AssemblyName).Manifest.Task.pdb;
+ TaskAssemblyNetStandard=$(ArtifactsDir)bin\$(AssemblyName).Manifest.Task\$(Configuration)\netstandard2.0\$(AssemblyName).Manifest.Task.dll;
+ TaskSymbolNetStandard=$(ArtifactsDir)bin\$(AssemblyName).Manifest.Task\$(Configuration)\netstandard2.0\$(AssemblyName).Manifest.Task.pdb;
-
diff --git a/src/FileProviders/Embedded/src/Properties/AssemblyInfo.cs b/src/FileProviders/Embedded/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 610a7fa706f..00000000000
--- a/src/FileProviders/Embedded/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,4 +0,0 @@
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.FileProviders.Embedded.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
\ No newline at end of file
diff --git a/src/FileProviders/Manifest.MSBuildTask/test/Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Test.csproj b/src/FileProviders/Manifest.MSBuildTask/test/Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests.csproj
similarity index 100%
rename from src/FileProviders/Manifest.MSBuildTask/test/Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Test.csproj
rename to src/FileProviders/Manifest.MSBuildTask/test/Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests.csproj
diff --git a/src/FileProviders/Physical/src/Microsoft.Extensions.FileProviders.Physical.csproj b/src/FileProviders/Physical/src/Microsoft.Extensions.FileProviders.Physical.csproj
index be7270c25e4..3327ca9999b 100644
--- a/src/FileProviders/Physical/src/Microsoft.Extensions.FileProviders.Physical.csproj
+++ b/src/FileProviders/Physical/src/Microsoft.Extensions.FileProviders.Physical.csproj
@@ -5,8 +5,14 @@
File provider for physical files for Microsoft.Extensions.FileProviders.
netstandard2.0
true
+ true
+
+
+
+
+
diff --git a/src/FileProviders/Physical/src/Properties/AssemblyInfo.cs b/src/FileProviders/Physical/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index ef640f1a711..00000000000
--- a/src/FileProviders/Physical/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.FileProviders.Physical.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
\ No newline at end of file
diff --git a/src/FileSystemGlobbing/src/Microsoft.Extensions.FileSystemGlobbing.csproj b/src/FileSystemGlobbing/src/Microsoft.Extensions.FileSystemGlobbing.csproj
index fb190152000..ef0b47af0b2 100644
--- a/src/FileSystemGlobbing/src/Microsoft.Extensions.FileSystemGlobbing.csproj
+++ b/src/FileSystemGlobbing/src/Microsoft.Extensions.FileSystemGlobbing.csproj
@@ -8,8 +8,13 @@
$(NoWarn);CS1591
files;filesystem;glob;globbing
true
+ true
+
+
+
+
diff --git a/src/FileSystemGlobbing/src/Properties/AssemblyInfo.cs b/src/FileSystemGlobbing/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index b1a0714e4f7..00000000000
--- a/src/FileSystemGlobbing/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.FileSystemGlobbing.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/HealthChecks/Abstractions/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.csproj b/src/HealthChecks/Abstractions/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.csproj
index b95d66f7b38..69298be027b 100644
--- a/src/HealthChecks/Abstractions/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.csproj
+++ b/src/HealthChecks/Abstractions/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.csproj
@@ -11,6 +11,7 @@ Microsoft.Extensions.Diagnostics.HealthChecks.IHealthCheck
$(NoWarn);CS1591
true
diagnostics;healthchecks
+ true
diff --git a/src/HealthChecks/HealthChecks/src/Microsoft.Extensions.Diagnostics.HealthChecks.csproj b/src/HealthChecks/HealthChecks/src/Microsoft.Extensions.Diagnostics.HealthChecks.csproj
index d0b1c97ef05..b49f194d0c0 100644
--- a/src/HealthChecks/HealthChecks/src/Microsoft.Extensions.Diagnostics.HealthChecks.csproj
+++ b/src/HealthChecks/HealthChecks/src/Microsoft.Extensions.Diagnostics.HealthChecks.csproj
@@ -10,8 +10,13 @@ Microsoft.Extensions.Diagnostics.HealthChecks.IHealthChecksBuilder
$(NoWarn);CS1591
true
diagnostics;healthchecks
+ true
+
+
+
+
diff --git a/src/HealthChecks/HealthChecks/src/Properties/AssemblyInfo.cs b/src/HealthChecks/HealthChecks/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 13e969bfad2..00000000000
--- a/src/HealthChecks/HealthChecks/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Diagnostics.HealthChecks.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
\ No newline at end of file
diff --git a/src/Hosting/Abstractions/src/Microsoft.Extensions.Hosting.Abstractions.csproj b/src/Hosting/Abstractions/src/Microsoft.Extensions.Hosting.Abstractions.csproj
index 746fbaf96d7..e4bfd8802d8 100644
--- a/src/Hosting/Abstractions/src/Microsoft.Extensions.Hosting.Abstractions.csproj
+++ b/src/Hosting/Abstractions/src/Microsoft.Extensions.Hosting.Abstractions.csproj
@@ -8,6 +8,7 @@
hosting
false
Microsoft.Extensions.Hosting
+ true
@@ -16,5 +17,5 @@
-
+
diff --git a/src/Hosting/Hosting/src/Microsoft.Extensions.Hosting.csproj b/src/Hosting/Hosting/src/Microsoft.Extensions.Hosting.csproj
index 1e7bd1e6b1d..1e258ee5bb3 100644
--- a/src/Hosting/Hosting/src/Microsoft.Extensions.Hosting.csproj
+++ b/src/Hosting/Hosting/src/Microsoft.Extensions.Hosting.csproj
@@ -7,6 +7,7 @@
true
hosting
false
+ true
diff --git a/src/Hosting/Hosting/test/HostBuilderTests.cs b/src/Hosting/Hosting/test/HostBuilderTests.cs
index 144fb0ad959..44b2fd77336 100644
--- a/src/Hosting/Hosting/test/HostBuilderTests.cs
+++ b/src/Hosting/Hosting/test/HostBuilderTests.cs
@@ -119,8 +119,7 @@ public void CanConfigureAppConfigurationAndRetrieveFromDI()
public void CanConfigureAppConfigurationFromFile()
{
// Needs to look in the project directory like VS would
- var projectDir = Path.Combine(TestPathUtilities.GetSolutionRootDirectory("Hosting"),
- "Hosting/test");
+ var projectDir = Path.Combine(TestPathUtilities.GetRepoRootDirectory(), "src", "Hosting", "Hosting", "test");
var hostBuilder = new HostBuilder()
.UseContentRoot(projectDir)
.ConfigureAppConfiguration((context, configBuilder) =>
diff --git a/src/Shared/src/BenchmarkRunner/Directory.Build.props b/src/Hosting/samples/Directory.Build.props
similarity index 73%
rename from src/Shared/src/BenchmarkRunner/Directory.Build.props
rename to src/Hosting/samples/Directory.Build.props
index d2f65e8d3dc..ec95ac0ef69 100644
--- a/src/Shared/src/BenchmarkRunner/Directory.Build.props
+++ b/src/Hosting/samples/Directory.Build.props
@@ -1,8 +1,7 @@
-
- Microsoft.AspNetCore.BenchmarkRunner.Sources
+ false
diff --git a/src/HttpClientFactory/Http/src/Microsoft.Extensions.Http.csproj b/src/HttpClientFactory/Http/src/Microsoft.Extensions.Http.csproj
index fc98b928d95..acaaa8d8123 100644
--- a/src/HttpClientFactory/Http/src/Microsoft.Extensions.Http.csproj
+++ b/src/HttpClientFactory/Http/src/Microsoft.Extensions.Http.csproj
@@ -10,8 +10,14 @@
$(NoWarn);CS1591
true
aspnetcore;httpclient
+ true
+
+
+
+
+
diff --git a/src/HttpClientFactory/Http/src/Properties/AssemblyInfo.cs b/src/HttpClientFactory/Http/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index 68708b3935b..00000000000
--- a/src/HttpClientFactory/Http/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Http.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/HttpClientFactory/Polly/src/Microsoft.Extensions.Http.Polly.csproj b/src/HttpClientFactory/Polly/src/Microsoft.Extensions.Http.Polly.csproj
index 4813a045d99..59803a9cf10 100644
--- a/src/HttpClientFactory/Polly/src/Microsoft.Extensions.Http.Polly.csproj
+++ b/src/HttpClientFactory/Polly/src/Microsoft.Extensions.Http.Polly.csproj
@@ -11,8 +11,13 @@
Microsoft.Extensions.Http
+ true
+
+
+
+
diff --git a/src/HttpClientFactory/Polly/src/Properties/AssemblyInfo.cs b/src/HttpClientFactory/Polly/src/Properties/AssemblyInfo.cs
index e4bc5810b65..d77af5dc957 100644
--- a/src/HttpClientFactory/Polly/src/Properties/AssemblyInfo.cs
+++ b/src/HttpClientFactory/Polly/src/Properties/AssemblyInfo.cs
@@ -1,7 +1,6 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
using System.Runtime.CompilerServices;
-[assembly: InternalsVisibleTo("Microsoft.Extensions.Http.Polly.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
+
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/HttpClientFactory/Polly/test/Microsoft.Extensions.Http.Polly.Tests.csproj b/src/HttpClientFactory/Polly/test/Microsoft.Extensions.Http.Polly.Tests.csproj
index ded0da60384..cb8e41cf039 100644
--- a/src/HttpClientFactory/Polly/test/Microsoft.Extensions.Http.Polly.Tests.csproj
+++ b/src/HttpClientFactory/Polly/test/Microsoft.Extensions.Http.Polly.Tests.csproj
@@ -1,7 +1,7 @@
- netcoreapp3.0;net472
+ $(StandardTestTfms)
diff --git a/src/JSInterop/Microsoft.JSInterop/src/Microsoft.JSInterop.csproj b/src/JSInterop/Microsoft.JSInterop/src/Microsoft.JSInterop.csproj
index bdfea26ad50..d91e8c2524e 100644
--- a/src/JSInterop/Microsoft.JSInterop/src/Microsoft.JSInterop.csproj
+++ b/src/JSInterop/Microsoft.JSInterop/src/Microsoft.JSInterop.csproj
@@ -7,4 +7,8 @@
true
+
+
+
+
diff --git a/src/JSInterop/Microsoft.JSInterop/src/Properties/AssemblyInfo.cs b/src/JSInterop/Microsoft.JSInterop/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index d65c89dc7f1..00000000000
--- a/src/JSInterop/Microsoft.JSInterop/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.JSInterop.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/JSInterop/Microsoft.JSInterop/test/DotNetDispatcherTest.cs b/src/JSInterop/Microsoft.JSInterop/test/DotNetDispatcherTest.cs
index eec537f987d..93ef9a24985 100644
--- a/src/JSInterop/Microsoft.JSInterop/test/DotNetDispatcherTest.cs
+++ b/src/JSInterop/Microsoft.JSInterop/test/DotNetDispatcherTest.cs
@@ -6,7 +6,7 @@
using System.Threading.Tasks;
using Xunit;
-namespace Microsoft.JSInterop.Test
+namespace Microsoft.JSInterop.Tests
{
public class DotNetDispatcherTest
{
@@ -73,7 +73,7 @@ public void CannotInvokeUnsuitableMethods(string methodIdentifier)
Assert.Equal($"The assembly '{thisAssemblyName}' does not contain a public method with [JSInvokableAttribute(\"{methodIdentifier}\")].", ex.Message);
}
- [Fact]
+ [Fact(Skip = "https://github.com/aspnet/AspNetCore-Internal/issues/1733")]
public Task CanInvokeStaticVoidMethod() => WithJSRuntime(jsRuntime =>
{
// Arrange/Act
@@ -109,7 +109,7 @@ public void CannotInvokeUnsuitableMethods(string methodIdentifier)
Assert.Equal(456, result.IntVal);
});
- [Fact]
+ [Fact(Skip = "https://github.com/aspnet/AspNetCore-Internal/issues/1733")]
public Task CanInvokeStaticWithParams() => WithJSRuntime(jsRuntime =>
{
// Arrange: Track a .NET object to use as an arg
@@ -140,7 +140,7 @@ public void CannotInvokeUnsuitableMethods(string methodIdentifier)
Assert.Equal(1299, resultDto2.IntVal);
});
- [Fact]
+ [Fact(Skip = "https://github.com/aspnet/AspNetCore-Internal/issues/1733")]
public Task CanInvokeInstanceVoidMethod() => WithJSRuntime(jsRuntime =>
{
// Arrange: Track some instance
@@ -155,7 +155,7 @@ public void CannotInvokeUnsuitableMethods(string methodIdentifier)
Assert.True(targetInstance.DidInvokeMyInvocableInstanceVoid);
});
- [Fact]
+ [Fact(Skip = "https://github.com/aspnet/AspNetCore-Internal/issues/1733")]
public Task CanInvokeBaseInstanceVoidMethod() => WithJSRuntime(jsRuntime =>
{
// Arrange: Track some instance
@@ -206,7 +206,7 @@ public void CannotInvokeUnsuitableMethods(string methodIdentifier)
Assert.StartsWith("There is no tracked object with id '1'.", ex.Message);
});
- [Fact]
+ [Fact(Skip = "https://github.com/aspnet/AspNetCore-Internal/issues/1733")]
public Task CanInvokeInstanceMethodWithParams() => WithJSRuntime(jsRuntime =>
{
// Arrange: Track some instance plus another object we'll pass as a param
@@ -242,7 +242,7 @@ public void CannotInvokeWithIncorrectNumberOfParams()
Assert.Equal("In call to 'InvocableStaticWithParams', expected 3 parameters but received 4.", ex.Message);
}
- [Fact]
+ [Fact(Skip = "https://github.com/aspnet/AspNetCore-Internal/issues/1733")]
public Task CanInvokeAsyncMethod() => WithJSRuntime(async jsRuntime =>
{
// Arrange: Track some instance plus another object we'll pass as a param
@@ -320,7 +320,8 @@ public class SomePublicType
protected static void StaticMethodWithoutAttribute() { }
protected static void InstanceMethodWithoutAttribute() { }
- [JSInvokable("InvocableStaticVoid")] public static void MyInvocableVoid()
+ [JSInvokable("InvocableStaticVoid")]
+ public static void MyInvocableVoid()
{
DidInvokeMyInvocableStaticVoid = true;
}
diff --git a/src/JSInterop/Microsoft.JSInterop/test/DotNetObjectRefTest.cs b/src/JSInterop/Microsoft.JSInterop/test/DotNetObjectRefTest.cs
index 969dcae79d9..1bdec6d4652 100644
--- a/src/JSInterop/Microsoft.JSInterop/test/DotNetObjectRefTest.cs
+++ b/src/JSInterop/Microsoft.JSInterop/test/DotNetObjectRefTest.cs
@@ -6,7 +6,7 @@
using System.Threading.Tasks;
using Xunit;
-namespace Microsoft.JSInterop.Test
+namespace Microsoft.JSInterop.Tests
{
public class DotNetObjectRefTest
{
diff --git a/src/JSInterop/Microsoft.JSInterop/test/JSInProcessRuntimeBaseTest.cs b/src/JSInterop/Microsoft.JSInterop/test/JSInProcessRuntimeBaseTest.cs
index d2e71f6eb21..36474fe4071 100644
--- a/src/JSInterop/Microsoft.JSInterop/test/JSInProcessRuntimeBaseTest.cs
+++ b/src/JSInterop/Microsoft.JSInterop/test/JSInProcessRuntimeBaseTest.cs
@@ -6,7 +6,7 @@
using System.Linq;
using Xunit;
-namespace Microsoft.JSInterop.Test
+namespace Microsoft.JSInterop.Tests
{
public class JSInProcessRuntimeBaseTest
{
@@ -21,7 +21,7 @@ public void DispatchesSyncCallsAndDeserializesResults()
};
// Act
- var syncResult = runtime.Invoke("test identifier 1", "arg1", 123, true );
+ var syncResult = runtime.Invoke("test identifier 1", "arg1", 123, true);
var call = runtime.InvokeCalls.Single();
// Assert
diff --git a/src/JSInterop/Microsoft.JSInterop/test/JSRuntimeBaseTest.cs b/src/JSInterop/Microsoft.JSInterop/test/JSRuntimeBaseTest.cs
index 9193d6deb8d..ab048e812fe 100644
--- a/src/JSInterop/Microsoft.JSInterop/test/JSRuntimeBaseTest.cs
+++ b/src/JSInterop/Microsoft.JSInterop/test/JSRuntimeBaseTest.cs
@@ -7,7 +7,7 @@
using System.Linq;
using Xunit;
-namespace Microsoft.JSInterop.Test
+namespace Microsoft.JSInterop.Tests
{
public class JSRuntimeBaseTest
{
@@ -18,7 +18,7 @@ public void DispatchesAsyncCallsWithDistinctAsyncHandles()
var runtime = new TestJSRuntime();
// Act
- runtime.InvokeAsync