Merge branch 'master' into merges/release/15.5-to-master-20171120-080035
This commit is contained in:
commit
d48654afe7
128 changed files with 2670 additions and 274 deletions
|
@ -1,6 +1,6 @@
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.26730.0
|
VisualStudioVersion = 15.0.27004.2008
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{ED2FE3E2-F7E7-4389-8231-B65123F2076F}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{ED2FE3E2-F7E7-4389-8231-B65123F2076F}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -230,6 +230,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.TestFramew
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Msbuild.Tests.Utilities", "test\Msbuild.Tests.Utilities\Msbuild.Tests.Utilities.csproj", "{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Msbuild.Tests.Utilities", "test\Msbuild.Tests.Utilities\Msbuild.Tests.Utilities.csproj", "{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.ToolPackageObtainer.Tests", "test\Microsoft.DotNet.ToolPackageObtainer.Tests\Microsoft.DotNet.ToolPackageObtainer.Tests.csproj", "{F0D50831-9468-4ACB-8FD8-E9883DD553FB}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.ShellShimMaker.Tests", "test\Microsoft.DotNet.ShellShimMaker.Tests\Microsoft.DotNet.ShellShimMaker.Tests.csproj", "{20376E28-68EB-4BE5-81A5-51500F1235E2}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -1614,6 +1618,54 @@ Global
|
||||||
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||||
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||||
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -1686,6 +1738,8 @@ Global
|
||||||
{B4EE3671-C103-4A37-8DEB-C74E0134104E} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
{B4EE3671-C103-4A37-8DEB-C74E0134104E} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
{44759218-B558-4AF0-8991-515F1100DCF5} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
{44759218-B558-4AF0-8991-515F1100DCF5} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
{E7C72EF2-8480-48B4-AAE8-A596F1A6048E} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
|
{F0D50831-9468-4ACB-8FD8-E9883DD553FB} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
|
{20376E28-68EB-4BE5-81A5-51500F1235E2} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {B526D2CE-EE2D-4AD4-93EF-1867D90FF1F5}
|
SolutionGuid = {B526D2CE-EE2D-4AD4-93EF-1867D90FF1F5}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 15
|
||||||
|
VisualStudioVersion = 15.0.27110.0
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "App", "App\App.csproj", "{BB02B949-F6BD-4872-95CB-96A05B1FE026}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{4E952B56-841D-461D-89A9-7977DDCC0625} = {4E952B56-841D-461D-89A9-7977DDCC0625}
|
||||||
|
{D53E177A-8ECF-43D5-A01E-98B884D53CA6} = {D53E177A-8ECF-43D5-A01E-98B884D53CA6}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "First", "First\First.csproj", "{D53E177A-8ECF-43D5-A01E-98B884D53CA6}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{4E952B56-841D-461D-89A9-7977DDCC0625} = {4E952B56-841D-461D-89A9-7977DDCC0625}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Second", "Second\Second.csproj", "{4E952B56-841D-461D-89A9-7977DDCC0625}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{BB02B949-F6BD-4872-95CB-96A05B1FE026}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{BB02B949-F6BD-4872-95CB-96A05B1FE026}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BB02B949-F6BD-4872-95CB-96A05B1FE026}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{BB02B949-F6BD-4872-95CB-96A05B1FE026}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D53E177A-8ECF-43D5-A01E-98B884D53CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D53E177A-8ECF-43D5-A01E-98B884D53CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D53E177A-8ECF-43D5-A01E-98B884D53CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D53E177A-8ECF-43D5-A01E-98B884D53CA6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4E952B56-841D-461D-89A9-7977DDCC0625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4E952B56-841D-461D-89A9-7977DDCC0625}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4E952B56-841D-461D-89A9-7977DDCC0625}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4E952B56-841D-461D-89A9-7977DDCC0625}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {F6D9A973-1CFD-41C9-84F2-1471C0FE67DF}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,8 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace App
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello World!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace First
|
||||||
|
{
|
||||||
|
public class Class1
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Second
|
||||||
|
{
|
||||||
|
public class Class1
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -1,11 +1,11 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<CLI_SharedFrameworkVersion>2.1.0-preview1-25919-02</CLI_SharedFrameworkVersion>
|
<CLI_SharedFrameworkVersion>2.1.0-preview1-25929-02</CLI_SharedFrameworkVersion>
|
||||||
<CLI_MSBuild_Version>15.5.179</CLI_MSBuild_Version>
|
<CLI_MSBuild_Version>15.5.179</CLI_MSBuild_Version>
|
||||||
<CLI_Roslyn_Version>2.6.0-beta3-62309-01</CLI_Roslyn_Version>
|
<CLI_Roslyn_Version>2.6.0-beta3-62309-01</CLI_Roslyn_Version>
|
||||||
<CLI_DiaSymNative_Version>1.6.0-beta2-25304</CLI_DiaSymNative_Version>
|
<CLI_DiaSymNative_Version>1.6.0-beta2-25304</CLI_DiaSymNative_Version>
|
||||||
<CLI_FSharp_Version>4.2.0-rtm-171104-0</CLI_FSharp_Version>
|
<CLI_FSharp_Version>4.2.0-rtm-171122-0</CLI_FSharp_Version>
|
||||||
<CLI_Deps_Satellites_Build>pre-20171012-1</CLI_Deps_Satellites_Build>
|
<CLI_Deps_Satellites_Build>pre-20171012-1</CLI_Deps_Satellites_Build>
|
||||||
<CLI_Roslyn_Satellites_Version>2.6.0-$(CLI_Deps_Satellites_Build)</CLI_Roslyn_Satellites_Version>
|
<CLI_Roslyn_Satellites_Version>2.6.0-$(CLI_Deps_Satellites_Build)</CLI_Roslyn_Satellites_Version>
|
||||||
<CLI_FSharp_Satellites_Version>4.4.1-$(CLI_Deps_Satellites_Build)</CLI_FSharp_Satellites_Version>
|
<CLI_FSharp_Satellites_Version>4.4.1-$(CLI_Deps_Satellites_Build)</CLI_FSharp_Satellites_Version>
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
<!-- We'll usually want to keep these versions in sync, but we may want to diverge in some
|
<!-- We'll usually want to keep these versions in sync, but we may want to diverge in some
|
||||||
cases, so use separate properties but derive one from the other unless we want to
|
cases, so use separate properties but derive one from the other unless we want to
|
||||||
explicitly use different versions. -->
|
explicitly use different versions. -->
|
||||||
<CLI_NETSDK_Version>15.5.0-preview-20171116-1</CLI_NETSDK_Version>
|
<CLI_NETSDK_Version>2.1.0-preview1-20171121-1</CLI_NETSDK_Version>
|
||||||
<CLI_MSBuildExtensions_Version>$(CLI_NETSDK_Version)</CLI_MSBuildExtensions_Version>
|
<CLI_MSBuildExtensions_Version>$(CLI_NETSDK_Version)</CLI_MSBuildExtensions_Version>
|
||||||
|
|
||||||
<CLI_NuGet_Version>4.5.0-rtm-4651</CLI_NuGet_Version>
|
<CLI_NuGet_Version>4.5.0-rtm-4651</CLI_NuGet_Version>
|
||||||
|
@ -23,12 +23,12 @@
|
||||||
<SharedFrameworkVersion>$(CLI_SharedFrameworkVersion)</SharedFrameworkVersion>
|
<SharedFrameworkVersion>$(CLI_SharedFrameworkVersion)</SharedFrameworkVersion>
|
||||||
<SharedHostVersion>$(CLI_SharedFrameworkVersion)</SharedHostVersion>
|
<SharedHostVersion>$(CLI_SharedFrameworkVersion)</SharedHostVersion>
|
||||||
<HostFxrVersion>$(CLI_SharedFrameworkVersion)</HostFxrVersion>
|
<HostFxrVersion>$(CLI_SharedFrameworkVersion)</HostFxrVersion>
|
||||||
<TemplateEngineVersion>1.0.0-beta3-20171110-312</TemplateEngineVersion>
|
<TemplateEngineVersion>1.0.0-beta3-20171117-314</TemplateEngineVersion>
|
||||||
<TemplateEngineTemplateVersion>1.0.0-beta3-20171117-314</TemplateEngineTemplateVersion>
|
<TemplateEngineTemplateVersion>1.0.0-beta3-20171117-314</TemplateEngineTemplateVersion>
|
||||||
<TemplateEngineTemplate2_0Version>1.0.0-beta3-20171117-314</TemplateEngineTemplate2_0Version>
|
<TemplateEngineTemplate2_0Version>1.0.0-beta3-20171117-314</TemplateEngineTemplate2_0Version>
|
||||||
<AspnetTemplateVersion>1.0.0-beta2-20171004-309</AspnetTemplateVersion>
|
<AspnetTemplateVersion>1.0.0-beta2-20171004-309</AspnetTemplateVersion>
|
||||||
<PlatformAbstractionsVersion>2.1.0-preview1-25919-02</PlatformAbstractionsVersion>
|
<PlatformAbstractionsVersion>2.1.0-preview1-25929-02</PlatformAbstractionsVersion>
|
||||||
<DependencyModelVersion>2.1.0-preview1-25919-02</DependencyModelVersion>
|
<DependencyModelVersion>2.1.0-preview1-25929-02</DependencyModelVersion>
|
||||||
<CliCommandLineParserVersion>0.1.1-alpha-174</CliCommandLineParserVersion>
|
<CliCommandLineParserVersion>0.1.1-alpha-174</CliCommandLineParserVersion>
|
||||||
<CliMigrateVersion>1.2.1-alpha-002133</CliMigrateVersion>
|
<CliMigrateVersion>1.2.1-alpha-002133</CliMigrateVersion>
|
||||||
<MicroBuildVersion>0.2.0</MicroBuildVersion>
|
<MicroBuildVersion>0.2.0</MicroBuildVersion>
|
||||||
|
|
|
@ -13,9 +13,10 @@ done
|
||||||
|
|
||||||
REPO_ROOT="$( cd -P "$( dirname "$SOURCE" )/../" && pwd )"
|
REPO_ROOT="$( cd -P "$( dirname "$SOURCE" )/../" && pwd )"
|
||||||
|
|
||||||
if [ "$uname" = "Darwin" ]
|
uname=$(uname)
|
||||||
|
if [ "$(uname)" == "Darwin" ]
|
||||||
then
|
then
|
||||||
RID=osx-x64
|
RID=osx.10.13-x64
|
||||||
else
|
else
|
||||||
RID=linux-x64
|
RID=linux-x64
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -285,6 +285,14 @@ namespace Microsoft.DotNet.Cli.Sln.Internal
|
||||||
get { return _sections; }
|
get { return _sections; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SlnSection Dependencies
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _sections.GetSection("ProjectDependencies", SlnSectionType.PostProcess);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal void Read(TextReader reader, string line, ref int curLineNum)
|
internal void Read(TextReader reader, string line, ref int curLineNum)
|
||||||
{
|
{
|
||||||
Line = curLineNum;
|
Line = curLineNum;
|
||||||
|
|
10
src/Microsoft.DotNet.Cli.Utils/IEnvironmentPath.cs
Normal file
10
src/Microsoft.DotNet.Cli.Utils/IEnvironmentPath.cs
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Cli.Utils
|
||||||
|
{
|
||||||
|
public interface IEnvironmentPath: IEnvironmentPathInstruction
|
||||||
|
{
|
||||||
|
void AddPackageExecutablePathToUserPath();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Microsoft.DotNet.Cli.Utils
|
||||||
|
{
|
||||||
|
public interface IEnvironmentPathInstruction
|
||||||
|
{
|
||||||
|
void PrintAddPathInstructionIfPathDoesNotExist();
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,3 +12,4 @@ using System.Runtime.CompilerServices;
|
||||||
[assembly: InternalsVisibleTo("Microsoft.DotNet.TestFramework, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.TestFramework, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("Microsoft.DotNet.Tools.Tests.Utilities, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.Tools.Tests.Utilities, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("Microsoft.DotNet.ProjectJsonMigration, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.ProjectJsonMigration, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.ShellShimMaker.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
|
||||||
using Microsoft.DotNet.PlatformAbstractions;
|
|
||||||
using NuGet.Common;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Configurer
|
|
||||||
{
|
|
||||||
public class CliFallbackFolderPathCalculator
|
|
||||||
{
|
|
||||||
public string CliFallbackFolderPath =>
|
|
||||||
Environment.GetEnvironmentVariable("DOTNET_CLI_TEST_FALLBACKFOLDER") ??
|
|
||||||
Path.Combine(new DirectoryInfo(AppContext.BaseDirectory).Parent.FullName, "NuGetFallbackFolder");
|
|
||||||
|
|
||||||
public string DotnetUserProfileFolderPath
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
string profileDir = Environment.GetEnvironmentVariable(
|
|
||||||
RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "USERPROFILE" : "HOME");
|
|
||||||
|
|
||||||
return Path.Combine(profileDir, ".dotnet");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string NuGetUserSettingsDirectory =>
|
|
||||||
NuGetEnvironment.GetFolderPath(NuGetFolderPath.UserSettingsDirectory);
|
|
||||||
}
|
|
||||||
}
|
|
38
src/Microsoft.DotNet.Configurer/CliFolderPathCalculator.cs
Normal file
38
src/Microsoft.DotNet.Configurer/CliFolderPathCalculator.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
using Microsoft.DotNet.PlatformAbstractions;
|
||||||
|
using NuGet.Common;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Configurer
|
||||||
|
{
|
||||||
|
public class CliFolderPathCalculator
|
||||||
|
{
|
||||||
|
private const string ToolsFolderName = "tools";
|
||||||
|
private const string DotnetProfileDirectoryName = ".dotnet";
|
||||||
|
|
||||||
|
public string CliFallbackFolderPath => Environment.GetEnvironmentVariable("DOTNET_CLI_TEST_FALLBACKFOLDER") ??
|
||||||
|
Path.Combine(new DirectoryInfo(AppContext.BaseDirectory).Parent.FullName, "NuGetFallbackFolder");
|
||||||
|
|
||||||
|
public string ExecutablePackagesPath => Path.Combine(DotnetUserProfileFolderPath, ToolsFolderName) ;
|
||||||
|
public readonly string ExecutablePackagesPathOnMacEnvPath = $"~/{DotnetProfileDirectoryName}/{ToolsFolderName}";
|
||||||
|
|
||||||
|
public static string DotnetUserProfileFolderPath
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string profileDir = Environment.GetEnvironmentVariable(
|
||||||
|
RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "USERPROFILE" : "HOME");
|
||||||
|
|
||||||
|
return Path.Combine(profileDir, DotnetProfileDirectoryName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string NuGetUserSettingsDirectory =>
|
||||||
|
NuGetEnvironment.GetFolderPath(NuGetFolderPath.UserSettingsDirectory);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,9 @@
|
||||||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
// 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.
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
using Microsoft.Extensions.EnvironmentAbstractions;
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
@ -15,6 +17,7 @@ namespace Microsoft.DotNet.Configurer
|
||||||
private INuGetCacheSentinel _nugetCacheSentinel;
|
private INuGetCacheSentinel _nugetCacheSentinel;
|
||||||
private IFirstTimeUseNoticeSentinel _firstTimeUseNoticeSentinel;
|
private IFirstTimeUseNoticeSentinel _firstTimeUseNoticeSentinel;
|
||||||
private string _cliFallbackFolderPath;
|
private string _cliFallbackFolderPath;
|
||||||
|
private readonly IEnvironmentPath _pathAdder;
|
||||||
|
|
||||||
public DotnetFirstTimeUseConfigurer(
|
public DotnetFirstTimeUseConfigurer(
|
||||||
INuGetCachePrimer nugetCachePrimer,
|
INuGetCachePrimer nugetCachePrimer,
|
||||||
|
@ -22,7 +25,8 @@ namespace Microsoft.DotNet.Configurer
|
||||||
IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel,
|
IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel,
|
||||||
IEnvironmentProvider environmentProvider,
|
IEnvironmentProvider environmentProvider,
|
||||||
IReporter reporter,
|
IReporter reporter,
|
||||||
string cliFallbackFolderPath)
|
string cliFallbackFolderPath,
|
||||||
|
IEnvironmentPath pathAdder)
|
||||||
{
|
{
|
||||||
_nugetCachePrimer = nugetCachePrimer;
|
_nugetCachePrimer = nugetCachePrimer;
|
||||||
_nugetCacheSentinel = nugetCacheSentinel;
|
_nugetCacheSentinel = nugetCacheSentinel;
|
||||||
|
@ -30,10 +34,13 @@ namespace Microsoft.DotNet.Configurer
|
||||||
_environmentProvider = environmentProvider;
|
_environmentProvider = environmentProvider;
|
||||||
_reporter = reporter;
|
_reporter = reporter;
|
||||||
_cliFallbackFolderPath = cliFallbackFolderPath;
|
_cliFallbackFolderPath = cliFallbackFolderPath;
|
||||||
|
_pathAdder = pathAdder ?? throw new ArgumentNullException(nameof(pathAdder));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure()
|
public void Configure()
|
||||||
{
|
{
|
||||||
|
AddPackageExecutablePath();
|
||||||
|
|
||||||
if (ShouldPrintFirstTimeUseNotice())
|
if (ShouldPrintFirstTimeUseNotice())
|
||||||
{
|
{
|
||||||
PrintFirstTimeUseNotice();
|
PrintFirstTimeUseNotice();
|
||||||
|
@ -54,6 +61,23 @@ namespace Microsoft.DotNet.Configurer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AddPackageExecutablePath()
|
||||||
|
{
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
if (!_firstTimeUseNoticeSentinel.Exists())
|
||||||
|
{
|
||||||
|
// Invoke when Windows first run
|
||||||
|
_pathAdder.AddPackageExecutablePathToUserPath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Invoke during installer, otherwise, _pathAdder will be no op object that this point
|
||||||
|
_pathAdder.AddPackageExecutablePathToUserPath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool ShouldPrintFirstTimeUseNotice()
|
private bool ShouldPrintFirstTimeUseNotice()
|
||||||
{
|
{
|
||||||
var showFirstTimeUseNotice =
|
var showFirstTimeUseNotice =
|
||||||
|
|
|
@ -19,9 +19,9 @@ namespace Microsoft.DotNet.Configurer
|
||||||
|
|
||||||
private string SentinelPath => Path.Combine(_dotnetUserProfileFolderPath, SENTINEL);
|
private string SentinelPath => Path.Combine(_dotnetUserProfileFolderPath, SENTINEL);
|
||||||
|
|
||||||
public FirstTimeUseNoticeSentinel(CliFallbackFolderPathCalculator cliFallbackFolderPathCalculator) :
|
public FirstTimeUseNoticeSentinel(CliFolderPathCalculator cliFolderPathCalculator) :
|
||||||
this(
|
this(
|
||||||
cliFallbackFolderPathCalculator.DotnetUserProfileFolderPath,
|
CliFolderPathCalculator.DotnetUserProfileFolderPath,
|
||||||
FileSystemWrapper.Default.File,
|
FileSystemWrapper.Default.File,
|
||||||
FileSystemWrapper.Default.Directory)
|
FileSystemWrapper.Default.Directory)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,15 +17,15 @@ namespace Microsoft.DotNet.Configurer
|
||||||
|
|
||||||
private readonly INuGetCacheSentinel _nuGetCacheSentinel;
|
private readonly INuGetCacheSentinel _nuGetCacheSentinel;
|
||||||
|
|
||||||
private readonly CliFallbackFolderPathCalculator _cliFallbackFolderPathCalculator;
|
private readonly CliFolderPathCalculator _cliFolderPathCalculator;
|
||||||
|
|
||||||
public NuGetCachePrimer(
|
public NuGetCachePrimer(
|
||||||
INuGetPackagesArchiver nugetPackagesArchiver,
|
INuGetPackagesArchiver nugetPackagesArchiver,
|
||||||
INuGetCacheSentinel nuGetCacheSentinel,
|
INuGetCacheSentinel nuGetCacheSentinel,
|
||||||
CliFallbackFolderPathCalculator cliFallbackFolderPathCalculator)
|
CliFolderPathCalculator cliFolderPathCalculator)
|
||||||
: this(nugetPackagesArchiver,
|
: this(nugetPackagesArchiver,
|
||||||
nuGetCacheSentinel,
|
nuGetCacheSentinel,
|
||||||
cliFallbackFolderPathCalculator,
|
cliFolderPathCalculator,
|
||||||
FileSystemWrapper.Default.File)
|
FileSystemWrapper.Default.File)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -33,14 +33,14 @@ namespace Microsoft.DotNet.Configurer
|
||||||
internal NuGetCachePrimer(
|
internal NuGetCachePrimer(
|
||||||
INuGetPackagesArchiver nugetPackagesArchiver,
|
INuGetPackagesArchiver nugetPackagesArchiver,
|
||||||
INuGetCacheSentinel nuGetCacheSentinel,
|
INuGetCacheSentinel nuGetCacheSentinel,
|
||||||
CliFallbackFolderPathCalculator cliFallbackFolderPathCalculator,
|
CliFolderPathCalculator cliFolderPathCalculator,
|
||||||
IFile file)
|
IFile file)
|
||||||
{
|
{
|
||||||
_nugetPackagesArchiver = nugetPackagesArchiver;
|
_nugetPackagesArchiver = nugetPackagesArchiver;
|
||||||
|
|
||||||
_nuGetCacheSentinel = nuGetCacheSentinel;
|
_nuGetCacheSentinel = nuGetCacheSentinel;
|
||||||
|
|
||||||
_cliFallbackFolderPathCalculator = cliFallbackFolderPathCalculator;
|
_cliFolderPathCalculator = cliFolderPathCalculator;
|
||||||
|
|
||||||
_file = file;
|
_file = file;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ namespace Microsoft.DotNet.Configurer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var nuGetFallbackFolder = _cliFallbackFolderPathCalculator.CliFallbackFolderPath;
|
var nuGetFallbackFolder = _cliFolderPathCalculator.CliFallbackFolderPath;
|
||||||
|
|
||||||
_nugetPackagesArchiver.ExtractArchive(nuGetFallbackFolder);
|
_nugetPackagesArchiver.ExtractArchive(nuGetFallbackFolder);
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,8 @@ namespace Microsoft.DotNet.Configurer
|
||||||
|
|
||||||
private Stream InProgressSentinel { get; set; }
|
private Stream InProgressSentinel { get; set; }
|
||||||
|
|
||||||
public NuGetCacheSentinel(CliFallbackFolderPathCalculator cliFallbackFolderPathCalculator) :
|
public NuGetCacheSentinel(CliFolderPathCalculator cliFolderPathCalculator) :
|
||||||
this(cliFallbackFolderPathCalculator.CliFallbackFolderPath,
|
this(cliFolderPathCalculator.CliFallbackFolderPath,
|
||||||
FileSystemWrapper.Default.File,
|
FileSystemWrapper.Default.File,
|
||||||
FileSystemWrapper.Default.Directory)
|
FileSystemWrapper.Default.Directory)
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,9 +14,9 @@ namespace Microsoft.DotNet.Configurer
|
||||||
private readonly IDirectory _directory;
|
private readonly IDirectory _directory;
|
||||||
private string _dotnetUserProfileFolderPath;
|
private string _dotnetUserProfileFolderPath;
|
||||||
|
|
||||||
public UserLevelCacheWriter(CliFallbackFolderPathCalculator cliFallbackFolderPathCalculator) :
|
public UserLevelCacheWriter(CliFolderPathCalculator cliFolderPathCalculator) :
|
||||||
this(
|
this(
|
||||||
cliFallbackFolderPathCalculator.DotnetUserProfileFolderPath,
|
CliFolderPathCalculator.DotnetUserProfileFolderPath,
|
||||||
FileSystemWrapper.Default.File,
|
FileSystemWrapper.Default.File,
|
||||||
FileSystemWrapper.Default.Directory)
|
FileSystemWrapper.Default.Directory)
|
||||||
{
|
{
|
||||||
|
|
47
src/Microsoft.DotNet.InternalAbstractions/DirectoryPath.cs
Normal file
47
src/Microsoft.DotNet.InternalAbstractions/DirectoryPath.cs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Microsoft.Extensions.EnvironmentAbstractions
|
||||||
|
{
|
||||||
|
public struct DirectoryPath
|
||||||
|
{
|
||||||
|
public string Value { get; }
|
||||||
|
|
||||||
|
public DirectoryPath(string value)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DirectoryPath WithSubDirectories(params string[] paths)
|
||||||
|
{
|
||||||
|
string[] insertValueInFront = new string[paths.Length + 1];
|
||||||
|
insertValueInFront[0] = Value;
|
||||||
|
Array.Copy(paths, 0, insertValueInFront, 1, paths.Length);
|
||||||
|
|
||||||
|
return new DirectoryPath(Path.Combine(insertValueInFront));
|
||||||
|
}
|
||||||
|
|
||||||
|
public FilePath WithFile(string fileName)
|
||||||
|
{
|
||||||
|
return new FilePath(Path.Combine(Value, fileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ToQuotedString()
|
||||||
|
{
|
||||||
|
return $"\"{Value}\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return ToQuotedString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public DirectoryPath GetParentPath()
|
||||||
|
{
|
||||||
|
return new DirectoryPath(Directory.GetParent(Path.GetFullPath(Value)).FullName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
src/Microsoft.DotNet.InternalAbstractions/FilePath.cs
Normal file
32
src/Microsoft.DotNet.InternalAbstractions/FilePath.cs
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Microsoft.Extensions.EnvironmentAbstractions
|
||||||
|
{
|
||||||
|
public struct FilePath
|
||||||
|
{
|
||||||
|
public string Value { get; }
|
||||||
|
|
||||||
|
public FilePath(string value)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ToQuotedString()
|
||||||
|
{
|
||||||
|
return $"\"{Value}\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return ToQuotedString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public DirectoryPath GetDirectoryPath()
|
||||||
|
{
|
||||||
|
return new DirectoryPath(Path.GetDirectoryName(Value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
[assembly: AssemblyMetadataAttribute("Serviceable", "True")]
|
[assembly: AssemblyMetadataAttribute("Serviceable", "True")]
|
||||||
[assembly: InternalsVisibleTo("Microsoft.Extensions.DependencyModel, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.Extensions.DependencyModel, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
[assembly: InternalsVisibleTo("dotnet, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("Microsoft.DotNet.Tools.Tests.Utilities, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.Tools.Tests.Utilities, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("Microsoft.Extensions.DependencyModel.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.Extensions.DependencyModel.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("Microsoft.DotNet.Configurer, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.Configurer, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
@ -13,3 +14,4 @@ using System.Runtime.CompilerServices;
|
||||||
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
|
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
|
||||||
[assembly: InternalsVisibleTo("dotnet-test.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100039ac461fa5c82c7dd2557400c4fd4e9dcdf7ac47e3d572548c04cd4673e004916610f4ea5cbf86f2b1ca1cb824f2a7b3976afecfcf4eb72d9a899aa6786effa10c30399e6580ed848231fec48374e41b3acf8811931343fc2f73acf72dae745adbcb7063cc4b50550618383202875223fc75401351cd89c44bf9b50e7fa3796")]
|
[assembly: InternalsVisibleTo("dotnet-test.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100039ac461fa5c82c7dd2557400c4fd4e9dcdf7ac47e3d572548c04cd4673e004916610f4ea5cbf86f2b1ca1cb824f2a7b3976afecfcf4eb72d9a899aa6786effa10c30399e6580ed848231fec48374e41b3acf8811931343fc2f73acf72dae745adbcb7063cc4b50550618383202875223fc75401351cd89c44bf9b50e7fa3796")]
|
||||||
[assembly: InternalsVisibleTo("Microsoft.DotNet.Tools.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.Tools.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.ShellShimMaker.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
|
21
src/dotnet/BundledTargetFramework.cs
Normal file
21
src/dotnet/BundledTargetFramework.cs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.Versioning;
|
||||||
|
using NuGet.Frameworks;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Cli
|
||||||
|
{
|
||||||
|
internal static class BundledTargetFramework
|
||||||
|
{
|
||||||
|
public static string GetTargetFrameworkMoniker()
|
||||||
|
{
|
||||||
|
TargetFrameworkAttribute targetFrameworkAttribute = typeof(BundledTargetFramework)
|
||||||
|
.GetTypeInfo()
|
||||||
|
.Assembly
|
||||||
|
.GetCustomAttribute<TargetFrameworkAttribute>();
|
||||||
|
|
||||||
|
return NuGetFramework
|
||||||
|
.Parse(targetFrameworkAttribute.FrameworkName)
|
||||||
|
.GetShortFolderName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,7 +19,7 @@ namespace Microsoft.DotNet.Cli
|
||||||
private static void ConfigureCommandLineLocalizedStrings()
|
private static void ConfigureCommandLineLocalizedStrings()
|
||||||
{
|
{
|
||||||
DefaultHelpViewText.AdditionalArgumentsSection =
|
DefaultHelpViewText.AdditionalArgumentsSection =
|
||||||
$"{UsageCommandsAdditionalArgsHeader}:{NewLine} {LocalizableStrings.RunCommandAdditionalArgsHelpText}";
|
$"{UsageCommandsAdditionalArgsHeader}{NewLine} {LocalizableStrings.RunCommandAdditionalArgsHelpText}";
|
||||||
DefaultHelpViewText.ArgumentsSection.Title = UsageArgumentsHeader;
|
DefaultHelpViewText.ArgumentsSection.Title = UsageArgumentsHeader;
|
||||||
DefaultHelpViewText.CommandsSection.Title = UsageCommandsHeader;
|
DefaultHelpViewText.CommandsSection.Title = UsageCommandsHeader;
|
||||||
DefaultHelpViewText.OptionsSection.Title = UsageOptionsHeader;
|
DefaultHelpViewText.OptionsSection.Title = UsageOptionsHeader;
|
||||||
|
|
|
@ -4,15 +4,19 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.DotNet.Cli.CommandLine;
|
using Microsoft.DotNet.Cli.CommandLine;
|
||||||
using Microsoft.DotNet.Cli.Telemetry;
|
using Microsoft.DotNet.Cli.Telemetry;
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
using Microsoft.DotNet.Configurer;
|
using Microsoft.DotNet.Configurer;
|
||||||
using Microsoft.DotNet.PlatformAbstractions;
|
using Microsoft.DotNet.PlatformAbstractions;
|
||||||
|
using Microsoft.DotNet.ShellShimMaker;
|
||||||
using Microsoft.DotNet.Tools.Help;
|
using Microsoft.DotNet.Tools.Help;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
using NuGet.Frameworks;
|
using NuGet.Frameworks;
|
||||||
using Command = Microsoft.DotNet.Cli.Utils.Command;
|
using Command = Microsoft.DotNet.Cli.Utils.Command;
|
||||||
|
using RuntimeEnvironment = Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment;
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Cli
|
namespace Microsoft.DotNet.Cli
|
||||||
{
|
{
|
||||||
|
@ -80,8 +84,9 @@ namespace Microsoft.DotNet.Cli
|
||||||
var success = true;
|
var success = true;
|
||||||
var command = string.Empty;
|
var command = string.Empty;
|
||||||
var lastArg = 0;
|
var lastArg = 0;
|
||||||
var cliFallbackFolderPathCalculator = new CliFallbackFolderPathCalculator();
|
var cliFallbackFolderPathCalculator = new CliFolderPathCalculator();
|
||||||
TopLevelCommandParserResult topLevelCommandParserResult = TopLevelCommandParserResult.Empty;
|
TopLevelCommandParserResult topLevelCommandParserResult = TopLevelCommandParserResult.Empty;
|
||||||
|
|
||||||
using (INuGetCacheSentinel nugetCacheSentinel = new NuGetCacheSentinel(cliFallbackFolderPathCalculator))
|
using (INuGetCacheSentinel nugetCacheSentinel = new NuGetCacheSentinel(cliFallbackFolderPathCalculator))
|
||||||
using (IFirstTimeUseNoticeSentinel disposableFirstTimeUseNoticeSentinel =
|
using (IFirstTimeUseNoticeSentinel disposableFirstTimeUseNoticeSentinel =
|
||||||
new FirstTimeUseNoticeSentinel(cliFallbackFolderPathCalculator))
|
new FirstTimeUseNoticeSentinel(cliFallbackFolderPathCalculator))
|
||||||
|
@ -120,22 +125,24 @@ namespace Microsoft.DotNet.Cli
|
||||||
{
|
{
|
||||||
// It's the command, and we're done!
|
// It's the command, and we're done!
|
||||||
command = args[lastArg];
|
command = args[lastArg];
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(command))
|
if (string.IsNullOrEmpty(command))
|
||||||
{
|
{
|
||||||
command = "help";
|
command = "help";
|
||||||
}
|
}
|
||||||
|
|
||||||
topLevelCommandParserResult = new TopLevelCommandParserResult(args[lastArg]);
|
topLevelCommandParserResult = new TopLevelCommandParserResult(command);
|
||||||
|
var hasSuperUserAccess = false;
|
||||||
if (IsDotnetBeingInvokedFromNativeInstaller(topLevelCommandParserResult))
|
if (IsDotnetBeingInvokedFromNativeInstaller(topLevelCommandParserResult))
|
||||||
{
|
{
|
||||||
firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel();
|
firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel();
|
||||||
|
hasSuperUserAccess = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigureDotNetForFirstTimeUse(
|
ConfigureDotNetForFirstTimeUse(
|
||||||
nugetCacheSentinel,
|
nugetCacheSentinel,
|
||||||
firstTimeUseNoticeSentinel,
|
firstTimeUseNoticeSentinel,
|
||||||
cliFallbackFolderPathCalculator);
|
cliFallbackFolderPathCalculator,
|
||||||
|
hasSuperUserAccess);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -197,24 +204,29 @@ namespace Microsoft.DotNet.Cli
|
||||||
private static void ConfigureDotNetForFirstTimeUse(
|
private static void ConfigureDotNetForFirstTimeUse(
|
||||||
INuGetCacheSentinel nugetCacheSentinel,
|
INuGetCacheSentinel nugetCacheSentinel,
|
||||||
IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel,
|
IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel,
|
||||||
CliFallbackFolderPathCalculator cliFallbackFolderPathCalculator)
|
CliFolderPathCalculator cliFolderPathCalculator,
|
||||||
|
bool hasSuperUserAccess)
|
||||||
{
|
{
|
||||||
|
var environmentProvider = new EnvironmentProvider();
|
||||||
|
|
||||||
using (PerfTrace.Current.CaptureTiming())
|
using (PerfTrace.Current.CaptureTiming())
|
||||||
{
|
{
|
||||||
var nugetPackagesArchiver = new NuGetPackagesArchiver();
|
var nugetPackagesArchiver = new NuGetPackagesArchiver();
|
||||||
var environmentProvider = new EnvironmentProvider();
|
var environmentPath =
|
||||||
|
EnvironmentPathFactory.CreateEnvironmentPath(cliFolderPathCalculator, hasSuperUserAccess, environmentProvider);
|
||||||
var commandFactory = new DotNetCommandFactory(alwaysRunOutOfProc: true);
|
var commandFactory = new DotNetCommandFactory(alwaysRunOutOfProc: true);
|
||||||
var nugetCachePrimer = new NuGetCachePrimer(
|
var nugetCachePrimer = new NuGetCachePrimer(
|
||||||
nugetPackagesArchiver,
|
nugetPackagesArchiver,
|
||||||
nugetCacheSentinel,
|
nugetCacheSentinel,
|
||||||
cliFallbackFolderPathCalculator);
|
cliFolderPathCalculator);
|
||||||
var dotnetConfigurer = new DotnetFirstTimeUseConfigurer(
|
var dotnetConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||||
nugetCachePrimer,
|
nugetCachePrimer,
|
||||||
nugetCacheSentinel,
|
nugetCacheSentinel,
|
||||||
firstTimeUseNoticeSentinel,
|
firstTimeUseNoticeSentinel,
|
||||||
environmentProvider,
|
environmentProvider,
|
||||||
Reporter.Output,
|
Reporter.Output,
|
||||||
cliFallbackFolderPathCalculator.CliFallbackFolderPath);
|
cliFolderPathCalculator.CliFallbackFolderPath,
|
||||||
|
environmentPath);
|
||||||
|
|
||||||
dotnetConfigurer.Configure();
|
dotnetConfigurer.Configure();
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,3 +17,5 @@ using System.Runtime.CompilerServices;
|
||||||
[assembly: InternalsVisibleTo("dotnet-sln-remove.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("dotnet-sln-remove.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("dotnet-msbuild.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("dotnet-msbuild.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("dotnet-run.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("dotnet-run.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.ToolPackageObtainer.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
[assembly: InternalsVisibleTo("Microsoft.DotNet.ShellShimMaker.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
|
22
src/dotnet/ShellShimMaker/DoNothingEnvironmentPath.cs
Normal file
22
src/dotnet/ShellShimMaker/DoNothingEnvironmentPath.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ShellShimMaker
|
||||||
|
{
|
||||||
|
public class DoNothingEnvironmentPath : IEnvironmentPath
|
||||||
|
{
|
||||||
|
public void AddPackageExecutablePathToUserPath()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PrintAddPathInstructionIfPathDoesNotExist()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
66
src/dotnet/ShellShimMaker/EnvironmentPathFactory.cs
Normal file
66
src/dotnet/ShellShimMaker/EnvironmentPathFactory.cs
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Xml.Xsl;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
using Microsoft.DotNet.Configurer;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ShellShimMaker
|
||||||
|
{
|
||||||
|
internal static class EnvironmentPathFactory
|
||||||
|
{
|
||||||
|
public static IEnvironmentPath CreateEnvironmentPath(
|
||||||
|
CliFolderPathCalculator cliFolderPathCalculator = null,
|
||||||
|
bool hasSuperUserAccess = false,
|
||||||
|
IEnvironmentProvider environmentProvider = null)
|
||||||
|
{
|
||||||
|
if (cliFolderPathCalculator == null)
|
||||||
|
{
|
||||||
|
cliFolderPathCalculator = new CliFolderPathCalculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (environmentProvider == null)
|
||||||
|
{
|
||||||
|
environmentProvider = new EnvironmentProvider();
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnvironmentPath environmentPath = new DoNothingEnvironmentPath();
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
environmentPath = new WindowsEnvironmentPath(
|
||||||
|
cliFolderPathCalculator.ExecutablePackagesPath,
|
||||||
|
Reporter.Output,
|
||||||
|
environmentProvider);
|
||||||
|
}
|
||||||
|
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && hasSuperUserAccess)
|
||||||
|
{
|
||||||
|
environmentPath = new LinuxEnvironmentPath(
|
||||||
|
cliFolderPathCalculator.ExecutablePackagesPath,
|
||||||
|
Reporter.Output,
|
||||||
|
environmentProvider, new FileWrapper());
|
||||||
|
}
|
||||||
|
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && hasSuperUserAccess)
|
||||||
|
{
|
||||||
|
environmentPath = new OSXEnvironmentPath(
|
||||||
|
packageExecutablePathWithTilde: cliFolderPathCalculator.ExecutablePackagesPathOnMacEnvPath,
|
||||||
|
fullPackageExecutablePath: cliFolderPathCalculator.ExecutablePackagesPath,
|
||||||
|
reporter: Reporter.Output,
|
||||||
|
environmentProvider: environmentProvider,
|
||||||
|
fileSystem: new FileWrapper());
|
||||||
|
}
|
||||||
|
|
||||||
|
return environmentPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnvironmentPathInstruction CreateEnvironmentPathInstruction(
|
||||||
|
CliFolderPathCalculator cliFolderPathCalculator = null,
|
||||||
|
IEnvironmentProvider environmentProvider = null)
|
||||||
|
{
|
||||||
|
return CreateEnvironmentPath(cliFolderPathCalculator, true, environmentProvider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
78
src/dotnet/ShellShimMaker/LinuxEnvironmentPath.cs
Normal file
78
src/dotnet/ShellShimMaker/LinuxEnvironmentPath.cs
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ShellShimMaker
|
||||||
|
{
|
||||||
|
internal class LinuxEnvironmentPath : IEnvironmentPath
|
||||||
|
{
|
||||||
|
private readonly IFile _fileSystem;
|
||||||
|
private readonly IEnvironmentProvider _environmentProvider;
|
||||||
|
private readonly IReporter _reporter;
|
||||||
|
private const string PathName = "PATH";
|
||||||
|
private readonly string _packageExecutablePath;
|
||||||
|
|
||||||
|
private readonly string _profiledDotnetCliToolsPath
|
||||||
|
= Environment.GetEnvironmentVariable("DOTNET_CLI_TEST_LINUX_PROFILED_PATH")
|
||||||
|
?? @"/etc/profile.d/dotnet-cli-tools-bin-path.sh";
|
||||||
|
|
||||||
|
internal LinuxEnvironmentPath(
|
||||||
|
string packageExecutablePath,
|
||||||
|
IReporter reporter,
|
||||||
|
IEnvironmentProvider environmentProvider,
|
||||||
|
IFile fileSystem)
|
||||||
|
{
|
||||||
|
_fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
|
||||||
|
_environmentProvider
|
||||||
|
= environmentProvider ?? throw new ArgumentNullException(nameof(environmentProvider));
|
||||||
|
_reporter
|
||||||
|
= reporter ?? throw new ArgumentNullException(nameof(reporter));
|
||||||
|
_packageExecutablePath
|
||||||
|
= packageExecutablePath ?? throw new ArgumentNullException(nameof(packageExecutablePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddPackageExecutablePathToUserPath()
|
||||||
|
{
|
||||||
|
if (PackageExecutablePathExists())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var script = $"export PATH=\"$PATH:{_packageExecutablePath}\"";
|
||||||
|
_fileSystem.WriteAllText(_profiledDotnetCliToolsPath, script);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool PackageExecutablePathExists()
|
||||||
|
{
|
||||||
|
return _environmentProvider
|
||||||
|
.GetEnvironmentVariable(PathName)
|
||||||
|
.Split(':').Contains(_packageExecutablePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PrintAddPathInstructionIfPathDoesNotExist()
|
||||||
|
{
|
||||||
|
if (!PackageExecutablePathExists())
|
||||||
|
{
|
||||||
|
if (_fileSystem.Exists(_profiledDotnetCliToolsPath))
|
||||||
|
{
|
||||||
|
_reporter.WriteLine("Since you just installed the .NET Core SDK, you will need to logout or restart your session before running the tool you installed.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// similar to https://code.visualstudio.com/docs/setup/mac
|
||||||
|
_reporter.WriteLine(
|
||||||
|
$"Cannot find the tools executable path. Please ensure {_packageExecutablePath} is added to your PATH.{Environment.NewLine}" +
|
||||||
|
$"If you are using bash. You can do this by running the following command:{Environment.NewLine}{Environment.NewLine}" +
|
||||||
|
$"cat << EOF >> ~/.bash_profile{Environment.NewLine}" +
|
||||||
|
$"# Add .NET Core SDK tools{Environment.NewLine}" +
|
||||||
|
$"export PATH=\"$PATH:{_packageExecutablePath}\"{Environment.NewLine}" +
|
||||||
|
$"EOF");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
85
src/dotnet/ShellShimMaker/OsxEnvironmentPath.cs
Normal file
85
src/dotnet/ShellShimMaker/OsxEnvironmentPath.cs
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ShellShimMaker
|
||||||
|
{
|
||||||
|
internal class OSXEnvironmentPath : IEnvironmentPath
|
||||||
|
{
|
||||||
|
private const string PathName = "PATH";
|
||||||
|
private readonly string _packageExecutablePathWithTilde;
|
||||||
|
private readonly string _fullPackageExecutablePath;
|
||||||
|
private readonly IFile _fileSystem;
|
||||||
|
private readonly IEnvironmentProvider _environmentProvider;
|
||||||
|
private readonly IReporter _reporter;
|
||||||
|
|
||||||
|
private static readonly string PathDDotnetCliToolsPath
|
||||||
|
= Environment.GetEnvironmentVariable("DOTNET_CLI_TEST_OSX_PATHSD_PATH")
|
||||||
|
?? @"/etc/paths.d/dotnet-cli-tools";
|
||||||
|
|
||||||
|
public OSXEnvironmentPath(
|
||||||
|
string packageExecutablePathWithTilde,
|
||||||
|
string fullPackageExecutablePath,
|
||||||
|
IReporter reporter,
|
||||||
|
IEnvironmentProvider environmentProvider,
|
||||||
|
IFile fileSystem
|
||||||
|
)
|
||||||
|
{
|
||||||
|
_fullPackageExecutablePath = fullPackageExecutablePath ??
|
||||||
|
throw new ArgumentNullException(nameof(fullPackageExecutablePath));
|
||||||
|
_packageExecutablePathWithTilde = packageExecutablePathWithTilde ??
|
||||||
|
throw new ArgumentNullException(nameof(packageExecutablePathWithTilde));
|
||||||
|
_fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
|
||||||
|
_environmentProvider
|
||||||
|
= environmentProvider ?? throw new ArgumentNullException(nameof(environmentProvider));
|
||||||
|
_reporter
|
||||||
|
= reporter ?? throw new ArgumentNullException(nameof(reporter));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddPackageExecutablePathToUserPath()
|
||||||
|
{
|
||||||
|
if (PackageExecutablePathExists())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var script = $"{_packageExecutablePathWithTilde}";
|
||||||
|
_fileSystem.WriteAllText(PathDDotnetCliToolsPath, script);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool PackageExecutablePathExists()
|
||||||
|
{
|
||||||
|
return _environmentProvider.GetEnvironmentVariable(PathName).Split(':')
|
||||||
|
.Contains(_packageExecutablePathWithTilde) ||
|
||||||
|
_environmentProvider.GetEnvironmentVariable(PathName).Split(':')
|
||||||
|
.Contains(_fullPackageExecutablePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PrintAddPathInstructionIfPathDoesNotExist()
|
||||||
|
{
|
||||||
|
if (!PackageExecutablePathExists())
|
||||||
|
{
|
||||||
|
if (_fileSystem.Exists(PathDDotnetCliToolsPath))
|
||||||
|
{
|
||||||
|
_reporter.WriteLine(
|
||||||
|
"Since you just installed the .NET Core SDK, you will need to reopen terminal before running the tool you installed.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// similar to https://code.visualstudio.com/docs/setup/mac
|
||||||
|
_reporter.WriteLine(
|
||||||
|
$"Cannot find the tools executable path. Please ensure {_fullPackageExecutablePath} is added to your PATH.{Environment.NewLine}" +
|
||||||
|
$"If you are using bash, You can do this by running the following command:{Environment.NewLine}{Environment.NewLine}" +
|
||||||
|
$"cat << EOF >> ~/.bash_profile{Environment.NewLine}" +
|
||||||
|
$"# Add .NET Core SDK tools{Environment.NewLine}" +
|
||||||
|
$"export PATH=\"$PATH:{_fullPackageExecutablePath}\"{Environment.NewLine}" +
|
||||||
|
$"EOF");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
89
src/dotnet/ShellShimMaker/ShellShimMaker.cs
Normal file
89
src/dotnet/ShellShimMaker/ShellShimMaker.cs
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ShellShimMaker
|
||||||
|
{
|
||||||
|
public class ShellShimMaker
|
||||||
|
{
|
||||||
|
private readonly string _pathToPlaceShim;
|
||||||
|
|
||||||
|
public ShellShimMaker(string pathToPlaceShim)
|
||||||
|
{
|
||||||
|
_pathToPlaceShim =
|
||||||
|
pathToPlaceShim ?? throw new ArgumentNullException(nameof(pathToPlaceShim));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateShim(string packageExecutablePath, string shellCommandName)
|
||||||
|
{
|
||||||
|
var packageExecutable = new FilePath(packageExecutablePath);
|
||||||
|
|
||||||
|
var script = new StringBuilder();
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
script.AppendLine("@echo off");
|
||||||
|
script.AppendLine($"dotnet {packageExecutable.ToQuotedString()} %*");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
script.AppendLine("#!/bin/sh");
|
||||||
|
script.AppendLine($"dotnet {packageExecutable.ToQuotedString()} \"$@\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath scriptPath = GetScriptPath(shellCommandName);
|
||||||
|
File.WriteAllText(scriptPath.Value, script.ToString());
|
||||||
|
|
||||||
|
SetUserExecutionPermissionToShimFile(scriptPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnsureCommandNameUniqueness(string shellCommandName)
|
||||||
|
{
|
||||||
|
if (File.Exists(Path.Combine(_pathToPlaceShim, shellCommandName)))
|
||||||
|
{
|
||||||
|
throw new GracefulException(
|
||||||
|
$"Failed to install tool {shellCommandName}. A command with the same name already exists.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove(string shellCommandName)
|
||||||
|
{
|
||||||
|
File.Delete(GetScriptPath(shellCommandName).Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FilePath GetScriptPath(string shellCommandName)
|
||||||
|
{
|
||||||
|
var scriptPath = Path.Combine(_pathToPlaceShim, shellCommandName);
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
scriptPath += ".cmd";
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FilePath(scriptPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SetUserExecutionPermissionToShimFile(FilePath scriptPath)
|
||||||
|
{
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) return;
|
||||||
|
|
||||||
|
CommandResult result = new CommandFactory()
|
||||||
|
.Create("chmod", new[] {"u+x", scriptPath.Value})
|
||||||
|
.CaptureStdOut()
|
||||||
|
.CaptureStdErr()
|
||||||
|
.Execute();
|
||||||
|
|
||||||
|
if (result.ExitCode != 0)
|
||||||
|
{
|
||||||
|
throw new GracefulException(
|
||||||
|
"Failed to change permission:" +
|
||||||
|
$"{Environment.NewLine}Error: " + result.StdErr +
|
||||||
|
$"{Environment.NewLine}Output: " + result.StdOut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
70
src/dotnet/ShellShimMaker/WindowsEnvironmentPath.cs
Normal file
70
src/dotnet/ShellShimMaker/WindowsEnvironmentPath.cs
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ShellShimMaker
|
||||||
|
{
|
||||||
|
internal class WindowsEnvironmentPath : IEnvironmentPath
|
||||||
|
{
|
||||||
|
private readonly IReporter _reporter;
|
||||||
|
private readonly IEnvironmentProvider _environmentProvider;
|
||||||
|
private const string PathName = "PATH";
|
||||||
|
private readonly string _packageExecutablePath;
|
||||||
|
|
||||||
|
public WindowsEnvironmentPath(
|
||||||
|
string packageExecutablePath, IReporter reporter,
|
||||||
|
IEnvironmentProvider environmentProvider)
|
||||||
|
{
|
||||||
|
_packageExecutablePath
|
||||||
|
= packageExecutablePath ?? throw new ArgumentNullException(nameof(packageExecutablePath));
|
||||||
|
_environmentProvider
|
||||||
|
= environmentProvider ?? throw new ArgumentNullException(nameof(environmentProvider));
|
||||||
|
_reporter
|
||||||
|
= reporter ?? throw new ArgumentNullException(nameof(reporter));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddPackageExecutablePathToUserPath()
|
||||||
|
{
|
||||||
|
if (PackageExecutablePathExists())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var existingUserEnvPath = Environment.GetEnvironmentVariable(PathName, EnvironmentVariableTarget.User);
|
||||||
|
|
||||||
|
Environment.SetEnvironmentVariable(
|
||||||
|
PathName,
|
||||||
|
$"{existingUserEnvPath};{_packageExecutablePath}",
|
||||||
|
EnvironmentVariableTarget.User);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool PackageExecutablePathExists()
|
||||||
|
{
|
||||||
|
return _environmentProvider.GetEnvironmentVariable(PathName).Split(';').Contains(_packageExecutablePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PrintAddPathInstructionIfPathDoesNotExist()
|
||||||
|
{
|
||||||
|
if (!PackageExecutablePathExists())
|
||||||
|
{
|
||||||
|
if (Environment.GetEnvironmentVariable(PathName, EnvironmentVariableTarget.User).Split(';')
|
||||||
|
.Contains(_packageExecutablePath))
|
||||||
|
{
|
||||||
|
_reporter.WriteLine(
|
||||||
|
"Since you just installed the .NET Core SDK, you will need to reopen the Command Prompt window before running the tool you installed.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_reporter.WriteLine(
|
||||||
|
$"Cannot find the tools executable path. Please ensure {_packageExecutablePath} is added to your PATH.{Environment.NewLine}" +
|
||||||
|
$"You can do this by running the following command:{Environment.NewLine}{Environment.NewLine}" +
|
||||||
|
$"setx PATH \\\"%PATH%;{_packageExecutablePath}\"{Environment.NewLine}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -247,6 +247,22 @@ namespace Microsoft.DotNet.Tools.Common
|
||||||
string.Format(CommonLocalizableStrings.ProjectReferenceRemoved, slnProject.FilePath));
|
string.Format(CommonLocalizableStrings.ProjectReferenceRemoved, slnProject.FilePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var project in slnFile.Projects)
|
||||||
|
{
|
||||||
|
var dependencies = project.Dependencies;
|
||||||
|
if (dependencies == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies.SkipIfEmpty = true;
|
||||||
|
|
||||||
|
foreach (var removed in projectsToRemove)
|
||||||
|
{
|
||||||
|
dependencies.Properties.Remove(removed.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
projectRemoved = true;
|
projectRemoved = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace Microsoft.DotNet.Cli.Telemetry
|
||||||
_hasher = hasher ?? Sha256Hasher.Hash;
|
_hasher = hasher ?? Sha256Hasher.Hash;
|
||||||
_getMACAddress = getMACAddress ?? MacAddressGetter.GetMacAddress;
|
_getMACAddress = getMACAddress ?? MacAddressGetter.GetMacAddress;
|
||||||
_dockerContainerDetector = dockerContainerDetector ?? new DockerContainerDetectorForTelemetry();
|
_dockerContainerDetector = dockerContainerDetector ?? new DockerContainerDetectorForTelemetry();
|
||||||
_userLevelCacheWriter = userLevelCacheWriter ?? new UserLevelCacheWriter(new CliFallbackFolderPathCalculator());
|
_userLevelCacheWriter = userLevelCacheWriter ?? new UserLevelCacheWriter(new CliFolderPathCalculator());
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly IDockerContainerDetector _dockerContainerDetector;
|
private readonly IDockerContainerDetector _dockerContainerDetector;
|
||||||
|
|
12
src/dotnet/ToolPackageObtainer/IPackageToProjectFileAdder.cs
Normal file
12
src/dotnet/ToolPackageObtainer/IPackageToProjectFileAdder.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal interface IPackageToProjectFileAdder
|
||||||
|
{
|
||||||
|
void Add(FilePath projectPath, string packageId);
|
||||||
|
}
|
||||||
|
}
|
15
src/dotnet/ToolPackageObtainer/IProjectRestorer.cs
Normal file
15
src/dotnet/ToolPackageObtainer/IProjectRestorer.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal interface IProjectRestorer
|
||||||
|
{
|
||||||
|
void Restore(
|
||||||
|
FilePath projectPath,
|
||||||
|
DirectoryPath assetJsonOutput,
|
||||||
|
FilePath? nugetconfig);
|
||||||
|
}
|
||||||
|
}
|
22
src/dotnet/ToolPackageObtainer/PackageObtainException.cs
Normal file
22
src/dotnet/ToolPackageObtainer/PackageObtainException.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal class PackageObtainException : Exception
|
||||||
|
{
|
||||||
|
public PackageObtainException()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public PackageObtainException(string message) : base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public PackageObtainException(string message, Exception innerException) : base(message, innerException)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
src/dotnet/ToolPackageObtainer/PackageVersion.cs
Normal file
28
src/dotnet/ToolPackageObtainer/PackageVersion.cs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal class PackageVersion
|
||||||
|
{
|
||||||
|
public PackageVersion(string packageVersion)
|
||||||
|
{
|
||||||
|
if (packageVersion == null)
|
||||||
|
{
|
||||||
|
Value = Path.GetRandomFileName();
|
||||||
|
IsPlaceholder = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Value = packageVersion;
|
||||||
|
IsPlaceholder = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPlaceholder { get; }
|
||||||
|
public string Value { get; }
|
||||||
|
public bool IsConcreteValue => !IsPlaceholder;
|
||||||
|
}
|
||||||
|
}
|
46
src/dotnet/ToolPackageObtainer/ToolConfiguration.cs
Normal file
46
src/dotnet/ToolPackageObtainer/ToolConfiguration.cs
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal class ToolConfiguration
|
||||||
|
{
|
||||||
|
public ToolConfiguration(
|
||||||
|
string commandName,
|
||||||
|
string toolAssemblyEntryPoint)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(commandName))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(commandName), "Cannot be null or whitespace");
|
||||||
|
}
|
||||||
|
|
||||||
|
EnsureNoInvalidFilenameCharacters(commandName, nameof(toolAssemblyEntryPoint));
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(toolAssemblyEntryPoint))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(toolAssemblyEntryPoint), "Cannot be null or whitespace");
|
||||||
|
}
|
||||||
|
|
||||||
|
CommandName = commandName;
|
||||||
|
ToolAssemblyEntryPoint = toolAssemblyEntryPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EnsureNoInvalidFilenameCharacters(string commandName, string nameOfParam)
|
||||||
|
{
|
||||||
|
// https://stackoverflow.com/questions/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names
|
||||||
|
char[] invalidCharactors = {'/', '<', '>', ':', '"', '/', '\\', '|', '?', '*'};
|
||||||
|
if (commandName.IndexOfAny(invalidCharactors) != -1)
|
||||||
|
{
|
||||||
|
throw new ArgumentException(
|
||||||
|
paramName: nameof(nameOfParam),
|
||||||
|
message: "Cannot contain following character " + new string(invalidCharactors));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public string CommandName { get; }
|
||||||
|
public string ToolAssemblyEntryPoint { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal class ToolConfigurationAndExecutableDirectory
|
||||||
|
{
|
||||||
|
public ToolConfigurationAndExecutableDirectory(
|
||||||
|
ToolConfiguration toolConfiguration,
|
||||||
|
DirectoryPath executableDirectory)
|
||||||
|
{
|
||||||
|
Configuration = toolConfiguration;
|
||||||
|
ExecutableDirectory = executableDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToolConfiguration Configuration { get; }
|
||||||
|
public DirectoryPath ExecutableDirectory { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer.ToolConfigurationDeserialization
|
||||||
|
{
|
||||||
|
[DebuggerStepThrough]
|
||||||
|
[XmlRoot(Namespace = "", IsNullable = false)]
|
||||||
|
public class DotNetCliTool
|
||||||
|
{
|
||||||
|
[XmlArrayItem("Command", IsNullable = false)]
|
||||||
|
public DotNetCliToolCommand[] Commands { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer.ToolConfigurationDeserialization
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
[DebuggerStepThrough]
|
||||||
|
[XmlType(AnonymousType = true)]
|
||||||
|
public class DotNetCliToolCommand
|
||||||
|
{
|
||||||
|
[XmlAttribute]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[XmlAttribute]
|
||||||
|
public string EntryPoint { get; set; }
|
||||||
|
|
||||||
|
[XmlAttribute]
|
||||||
|
public string Runner { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
using Microsoft.DotNet.ToolPackageObtainer.ToolConfigurationDeserialization;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal static class ToolConfigurationDeserializer
|
||||||
|
{
|
||||||
|
public static ToolConfiguration Deserialize(string pathToXml)
|
||||||
|
{
|
||||||
|
var serializer = new XmlSerializer(typeof(DotNetCliTool));
|
||||||
|
|
||||||
|
DotNetCliTool dotNetCliTool;
|
||||||
|
|
||||||
|
using (var fs = new FileStream(pathToXml, FileMode.Open))
|
||||||
|
{
|
||||||
|
var reader = XmlReader.Create(fs);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dotNetCliTool = (DotNetCliTool)serializer.Deserialize(reader);
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException e) when (e.InnerException is XmlException)
|
||||||
|
{
|
||||||
|
throw new ToolConfigurationException(
|
||||||
|
"Failed to retrive tool configuration exception, configuration is malformed xml. " +
|
||||||
|
e.InnerException.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dotNetCliTool.Commands.Length != 1)
|
||||||
|
{
|
||||||
|
throw new ToolConfigurationException(
|
||||||
|
"Failed to retrive tool configuration exception, one and only one command is supported.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dotNetCliTool.Commands[0].Runner != "dotnet")
|
||||||
|
{
|
||||||
|
throw new ToolConfigurationException(
|
||||||
|
"Failed to retrive tool configuration exception, only dotnet as runner is supported.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var commandName = dotNetCliTool.Commands[0].Name;
|
||||||
|
var toolAssemblyEntryPoint = dotNetCliTool.Commands[0].EntryPoint;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return new ToolConfiguration(commandName, toolAssemblyEntryPoint);
|
||||||
|
}
|
||||||
|
catch (ArgumentException e)
|
||||||
|
{
|
||||||
|
throw new ToolConfigurationException("Configuration content error. " + e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
src/dotnet/ToolPackageObtainer/ToolConfigurationException.cs
Normal file
14
src/dotnet/ToolPackageObtainer/ToolConfigurationException.cs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal class ToolConfigurationException : ArgumentException
|
||||||
|
{
|
||||||
|
public ToolConfigurationException(string message) : base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
190
src/dotnet/ToolPackageObtainer/ToolPackageObtainer.cs
Normal file
190
src/dotnet/ToolPackageObtainer/ToolPackageObtainer.cs
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ToolPackageObtainer
|
||||||
|
{
|
||||||
|
internal class ToolPackageObtainer
|
||||||
|
{
|
||||||
|
private readonly Lazy<string> _bundledTargetFrameworkMoniker;
|
||||||
|
private readonly Func<FilePath> _getTempProjectPath;
|
||||||
|
private readonly IPackageToProjectFileAdder _packageToProjectFileAdder;
|
||||||
|
private readonly IProjectRestorer _projectRestorer;
|
||||||
|
private readonly DirectoryPath _toolsPath;
|
||||||
|
|
||||||
|
public ToolPackageObtainer(
|
||||||
|
DirectoryPath toolsPath,
|
||||||
|
Func<FilePath> getTempProjectPath,
|
||||||
|
Lazy<string> bundledTargetFrameworkMoniker,
|
||||||
|
IPackageToProjectFileAdder packageToProjectFileAdder,
|
||||||
|
IProjectRestorer projectRestorer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
_getTempProjectPath = getTempProjectPath;
|
||||||
|
_bundledTargetFrameworkMoniker = bundledTargetFrameworkMoniker;
|
||||||
|
_projectRestorer = projectRestorer ?? throw new ArgumentNullException(nameof(projectRestorer));
|
||||||
|
_packageToProjectFileAdder = packageToProjectFileAdder ??
|
||||||
|
throw new ArgumentNullException(nameof(packageToProjectFileAdder));
|
||||||
|
_toolsPath = toolsPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToolConfigurationAndExecutableDirectory ObtainAndReturnExecutablePath(
|
||||||
|
string packageId,
|
||||||
|
string packageVersion = null,
|
||||||
|
FilePath? nugetconfig = null,
|
||||||
|
string targetframework = null)
|
||||||
|
{
|
||||||
|
if (packageId == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(packageId));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetframework == null)
|
||||||
|
{
|
||||||
|
targetframework = _bundledTargetFrameworkMoniker.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var packageVersionOrPlaceHolder = new PackageVersion(packageVersion);
|
||||||
|
|
||||||
|
DirectoryPath individualToolVersion =
|
||||||
|
CreateIndividualToolVersionDirectory(packageId, packageVersionOrPlaceHolder);
|
||||||
|
|
||||||
|
FilePath tempProjectPath = CreateTempProject(
|
||||||
|
packageId,
|
||||||
|
packageVersionOrPlaceHolder,
|
||||||
|
targetframework,
|
||||||
|
individualToolVersion);
|
||||||
|
|
||||||
|
if (packageVersionOrPlaceHolder.IsPlaceholder)
|
||||||
|
{
|
||||||
|
InvokeAddPackageRestore(
|
||||||
|
nugetconfig,
|
||||||
|
tempProjectPath,
|
||||||
|
packageId);
|
||||||
|
}
|
||||||
|
|
||||||
|
InvokeRestore(nugetconfig, tempProjectPath, individualToolVersion);
|
||||||
|
|
||||||
|
if (packageVersionOrPlaceHolder.IsPlaceholder)
|
||||||
|
{
|
||||||
|
var concreteVersion =
|
||||||
|
new DirectoryInfo(
|
||||||
|
Directory.GetDirectories(
|
||||||
|
individualToolVersion.WithSubDirectories(packageId).Value).Single()).Name;
|
||||||
|
DirectoryPath concreteVersionIndividualToolVersion =
|
||||||
|
individualToolVersion.GetParentPath().WithSubDirectories(concreteVersion);
|
||||||
|
Directory.Move(individualToolVersion.Value, concreteVersionIndividualToolVersion.Value);
|
||||||
|
|
||||||
|
individualToolVersion = concreteVersionIndividualToolVersion;
|
||||||
|
packageVersion = concreteVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
ToolConfiguration toolConfiguration = GetConfiguration(packageId, packageVersion, individualToolVersion);
|
||||||
|
|
||||||
|
return new ToolConfigurationAndExecutableDirectory(
|
||||||
|
toolConfiguration,
|
||||||
|
individualToolVersion.WithSubDirectories(
|
||||||
|
packageId,
|
||||||
|
packageVersion,
|
||||||
|
"tools",
|
||||||
|
targetframework));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ToolConfiguration GetConfiguration(
|
||||||
|
string packageId,
|
||||||
|
string packageVersion,
|
||||||
|
DirectoryPath individualToolVersion)
|
||||||
|
{
|
||||||
|
FilePath toolConfigurationPath =
|
||||||
|
individualToolVersion
|
||||||
|
.WithSubDirectories(packageId, packageVersion, "tools")
|
||||||
|
.WithFile("DotnetToolsConfig.xml");
|
||||||
|
|
||||||
|
ToolConfiguration toolConfiguration =
|
||||||
|
ToolConfigurationDeserializer.Deserialize(toolConfigurationPath.Value);
|
||||||
|
|
||||||
|
return toolConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InvokeRestore(
|
||||||
|
FilePath? nugetconfig,
|
||||||
|
FilePath tempProjectPath,
|
||||||
|
DirectoryPath individualToolVersion)
|
||||||
|
{
|
||||||
|
_projectRestorer.Restore(tempProjectPath, individualToolVersion, nugetconfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FilePath CreateTempProject(
|
||||||
|
string packageId,
|
||||||
|
PackageVersion packageVersion,
|
||||||
|
string targetframework,
|
||||||
|
DirectoryPath individualToolVersion)
|
||||||
|
{
|
||||||
|
FilePath tempProjectPath = _getTempProjectPath();
|
||||||
|
if (Path.GetExtension(tempProjectPath.Value) != "csproj")
|
||||||
|
{
|
||||||
|
tempProjectPath = new FilePath(Path.ChangeExtension(tempProjectPath.Value, "csproj"));
|
||||||
|
}
|
||||||
|
|
||||||
|
EnsureDirectoryExists(tempProjectPath.GetDirectoryPath());
|
||||||
|
var tempProjectContent = new XDocument(
|
||||||
|
new XElement("Project",
|
||||||
|
new XAttribute("Sdk", "Microsoft.NET.Sdk"),
|
||||||
|
new XElement("PropertyGroup",
|
||||||
|
new XElement("TargetFramework", targetframework),
|
||||||
|
new XElement("RestorePackagesPath", individualToolVersion.Value),
|
||||||
|
new XElement("DisableImplicitFrameworkReferences", "true")
|
||||||
|
),
|
||||||
|
packageVersion.IsConcreteValue
|
||||||
|
? new XElement("ItemGroup",
|
||||||
|
new XElement("PackageReference",
|
||||||
|
new XAttribute("Include", packageId),
|
||||||
|
new XAttribute("Version", packageVersion.Value)
|
||||||
|
))
|
||||||
|
: null));
|
||||||
|
|
||||||
|
File.WriteAllText(tempProjectPath.Value,
|
||||||
|
tempProjectContent.ToString());
|
||||||
|
|
||||||
|
return tempProjectPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InvokeAddPackageRestore(
|
||||||
|
FilePath? nugetconfig,
|
||||||
|
FilePath tempProjectPath,
|
||||||
|
string packageId)
|
||||||
|
{
|
||||||
|
if (nugetconfig != null)
|
||||||
|
{
|
||||||
|
File.Copy(
|
||||||
|
nugetconfig.Value.Value,
|
||||||
|
tempProjectPath
|
||||||
|
.GetDirectoryPath()
|
||||||
|
.WithFile("nuget.config")
|
||||||
|
.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
_packageToProjectFileAdder.Add(tempProjectPath, packageId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DirectoryPath CreateIndividualToolVersionDirectory(
|
||||||
|
string packageId,
|
||||||
|
PackageVersion packageVersion)
|
||||||
|
{
|
||||||
|
DirectoryPath individualTool = _toolsPath.WithSubDirectories(packageId);
|
||||||
|
DirectoryPath individualToolVersion = individualTool.WithSubDirectories(packageVersion.Value);
|
||||||
|
EnsureDirectoryExists(individualToolVersion);
|
||||||
|
return individualToolVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void EnsureDirectoryExists(DirectoryPath path)
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(path.Value))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(path.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.DotNet.ToolPackageObtainer;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Cli
|
||||||
|
{
|
||||||
|
|
||||||
|
internal class PackageToProjectFileAdder : IPackageToProjectFileAdder
|
||||||
|
{
|
||||||
|
public void Add(FilePath projectPath, string packageId)
|
||||||
|
{
|
||||||
|
if (packageId == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(packageId));
|
||||||
|
}
|
||||||
|
|
||||||
|
var argsToPassToRestore = new List<string>
|
||||||
|
{
|
||||||
|
projectPath.Value,
|
||||||
|
"package",
|
||||||
|
packageId,
|
||||||
|
"--no-restore"
|
||||||
|
};
|
||||||
|
|
||||||
|
var command = new DotNetCommandFactory(alwaysRunOutOfProc: true)
|
||||||
|
.Create(
|
||||||
|
"add",
|
||||||
|
argsToPassToRestore)
|
||||||
|
.CaptureStdOut()
|
||||||
|
.CaptureStdErr();
|
||||||
|
|
||||||
|
var result = command.Execute();
|
||||||
|
if (result.ExitCode != 0)
|
||||||
|
{
|
||||||
|
throw new PackageObtainException("Failed to add package. " +
|
||||||
|
$"{Environment.NewLine}WorkingDirectory: " +
|
||||||
|
result.StartInfo.WorkingDirectory +
|
||||||
|
$"{Environment.NewLine}Arguments: " +
|
||||||
|
result.StartInfo.Arguments +
|
||||||
|
$"{Environment.NewLine}Output: " +
|
||||||
|
result.StdErr + result.StdOut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
55
src/dotnet/commands/dotnet-install/ProjectRestorer.cs
Normal file
55
src/dotnet/commands/dotnet-install/ProjectRestorer.cs
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.DotNet.ToolPackageObtainer;
|
||||||
|
using Microsoft.DotNet.PlatformAbstractions;
|
||||||
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Cli
|
||||||
|
{
|
||||||
|
internal class ProjectRestorer : IProjectRestorer
|
||||||
|
{
|
||||||
|
public void Restore(
|
||||||
|
FilePath projectPath,
|
||||||
|
DirectoryPath assetJsonOutput,
|
||||||
|
FilePath? nugetconfig)
|
||||||
|
{
|
||||||
|
var argsToPassToRestore = new List<string>();
|
||||||
|
|
||||||
|
argsToPassToRestore.Add(projectPath.ToQuotedString());
|
||||||
|
if (nugetconfig != null)
|
||||||
|
{
|
||||||
|
argsToPassToRestore.Add("--configfile");
|
||||||
|
argsToPassToRestore.Add(nugetconfig.Value.ToQuotedString());
|
||||||
|
}
|
||||||
|
|
||||||
|
argsToPassToRestore.AddRange(new List<string>
|
||||||
|
{
|
||||||
|
"--runtime",
|
||||||
|
RuntimeEnvironment.GetRuntimeIdentifier(),
|
||||||
|
$"/p:BaseIntermediateOutputPath={assetJsonOutput.ToQuotedString()}"
|
||||||
|
});
|
||||||
|
|
||||||
|
var command = new DotNetCommandFactory(alwaysRunOutOfProc: true)
|
||||||
|
.Create(
|
||||||
|
"restore",
|
||||||
|
argsToPassToRestore)
|
||||||
|
.CaptureStdOut()
|
||||||
|
.CaptureStdErr();
|
||||||
|
|
||||||
|
var result = command.Execute();
|
||||||
|
if (result.ExitCode != 0)
|
||||||
|
{
|
||||||
|
throw new PackageObtainException("Failed to restore package. " +
|
||||||
|
$"{Environment.NewLine}WorkingDirectory: " +
|
||||||
|
result.StartInfo.WorkingDirectory +
|
||||||
|
$"{Environment.NewLine}Arguments: " +
|
||||||
|
result.StartInfo.Arguments +
|
||||||
|
$"{Environment.NewLine}Output: " +
|
||||||
|
result.StdErr + result.StdOut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ namespace Microsoft.DotNet.Tools.MSBuild
|
||||||
public sealed class MSBuildLogger : Logger
|
public sealed class MSBuildLogger : Logger
|
||||||
{
|
{
|
||||||
private readonly IFirstTimeUseNoticeSentinel _sentinel =
|
private readonly IFirstTimeUseNoticeSentinel _sentinel =
|
||||||
new FirstTimeUseNoticeSentinel(new CliFallbackFolderPathCalculator());
|
new FirstTimeUseNoticeSentinel(new CliFolderPathCalculator());
|
||||||
private readonly ITelemetry _telemetry;
|
private readonly ITelemetry _telemetry;
|
||||||
private const string NewEventName = "msbuild";
|
private const string NewEventName = "msbuild";
|
||||||
private const string TargetFrameworkTelemetryEventName = "targetframeworkeval";
|
private const string TargetFrameworkTelemetryEventName = "targetframeworkeval";
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace Microsoft.DotNet.Tools.New
|
||||||
var sessionId =
|
var sessionId =
|
||||||
Environment.GetEnvironmentVariable(MSBuildForwardingApp.TelemetrySessionIdEnvironmentVariableName);
|
Environment.GetEnvironmentVariable(MSBuildForwardingApp.TelemetrySessionIdEnvironmentVariableName);
|
||||||
var telemetry =
|
var telemetry =
|
||||||
new Telemetry(new FirstTimeUseNoticeSentinel(new CliFallbackFolderPathCalculator()), sessionId);
|
new Telemetry(new FirstTimeUseNoticeSentinel(new CliFolderPathCalculator()), sessionId);
|
||||||
var logger = new TelemetryLogger(null);
|
var logger = new TelemetryLogger(null);
|
||||||
|
|
||||||
if (telemetry.Enabled)
|
if (telemetry.Enabled)
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
<value>Directory in which to place built packages.</value>
|
<value>Directory in which to place built packages.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CmdNoBuildOptionDescription" xml:space="preserve">
|
<data name="CmdNoBuildOptionDescription" xml:space="preserve">
|
||||||
<value>Skip building the project prior to packing. By default, the project will be built.</value>
|
<value>Do not build project before packing. Implies --no-restore.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CmdIncludeSymbolsDescription" xml:space="preserve">
|
<data name="CmdIncludeSymbolsDescription" xml:space="preserve">
|
||||||
<value>Include packages with symbols in addition to regular packages in output directory.</value>
|
<value>Include packages with symbols in addition to regular packages in output directory.</value>
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace Microsoft.DotNet.Tools.Pack
|
||||||
|
|
||||||
msbuildArgs.AddRange(parsedPack.Arguments);
|
msbuildArgs.AddRange(parsedPack.Arguments);
|
||||||
|
|
||||||
bool noRestore = parsedPack.HasOption("--no-restore");
|
bool noRestore = parsedPack.HasOption("--no-restore") || parsedPack.HasOption("--no-build");
|
||||||
|
|
||||||
return new PackCommand(
|
return new PackCommand(
|
||||||
msbuildArgs,
|
msbuildArgs,
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Přeskočí sestavení projektu, dokud ho nezabalíte. Projekt se sestaví automaticky.</target>
|
<target state="needs-review-translation">Přeskočí sestavení projektu, dokud ho nezabalíte. Projekt se sestaví automaticky.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Hiermit wird das Projekt nicht vor dem Packen erstellt. Standardmäßig wird das Projekt erstellt.</target>
|
<target state="needs-review-translation">Hiermit wird das Projekt nicht vor dem Packen erstellt. Standardmäßig wird das Projekt erstellt.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Omita la compilación del proyecto antes de empaquetar. El proyecto se compilará de manera predeterminada.</target>
|
<target state="needs-review-translation">Omita la compilación del proyecto antes de empaquetar. El proyecto se compilará de manera predeterminada.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Ignorez la génération du projet avant la compression. Par défaut, le projet est généré.</target>
|
<target state="needs-review-translation">Ignorez la génération du projet avant la compression. Par défaut, le projet est généré.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Consente di ignorare la compilazione del progetto prima di creare il pacchetto. Per impostazione predefinita, il progetto verrà compilato.</target>
|
<target state="needs-review-translation">Consente di ignorare la compilazione del progetto prima di creare il pacchetto. Per impostazione predefinita, il progetto verrà compilato.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">パッキングの前に、プロジェクトの構築をスキップします。既定では、プロジェクトは構築されます。</target>
|
<target state="needs-review-translation">パッキングの前に、プロジェクトの構築をスキップします。既定では、プロジェクトは構築されます。</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">압축하기 전에 프로젝트를 빌드하지 않습니다. 기본적으로 프로젝트가 빌드됩니다.</target>
|
<target state="needs-review-translation">압축하기 전에 프로젝트를 빌드하지 않습니다. 기본적으로 프로젝트가 빌드됩니다.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Pomiń kompilację projektu przed pakowaniem. Domyślnie projekt zostanie skompilowany.</target>
|
<target state="needs-review-translation">Pomiń kompilację projektu przed pakowaniem. Domyślnie projekt zostanie skompilowany.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Ignorar a compilação do projeto antes do empacotamento. Por padrão, o projeto será compilado.</target>
|
<target state="needs-review-translation">Ignorar a compilação do projeto antes do empacotamento. Por padrão, o projeto será compilado.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Пропуск сборки проекта перед упаковкой. По умолчанию выполняется сборка проекта.</target>
|
<target state="needs-review-translation">Пропуск сборки проекта перед упаковкой. По умолчанию выполняется сборка проекта.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">Projeyi paketlemeden önce derlemeyi atlayın. Varsayılan olarak, proje derlenir.</target>
|
<target state="needs-review-translation">Projeyi paketlemeden önce derlemeyi atlayın. Varsayılan olarak, proje derlenir.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">在打包之前跳过生成项目。默认情况下,将生成项目。</target>
|
<target state="needs-review-translation">在打包之前跳过生成项目。默认情况下,将生成项目。</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildOptionDescription">
|
<trans-unit id="CmdNoBuildOptionDescription">
|
||||||
<source>Skip building the project prior to packing. By default, the project will be built.</source>
|
<source>Do not build project before packing. Implies --no-restore.</source>
|
||||||
<target state="translated">在封裝前跳過建置專案。預設會建置專案。</target>
|
<target state="needs-review-translation">在封裝前跳過建置專案。預設會建置專案。</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdIncludeSymbolsDescription">
|
<trans-unit id="CmdIncludeSymbolsDescription">
|
||||||
|
|
|
@ -124,14 +124,11 @@
|
||||||
<value>Command used to run .NET apps</value>
|
<value>Command used to run .NET apps</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CommandOptionNoBuildDescription" xml:space="preserve">
|
<data name="CommandOptionNoBuildDescription" xml:space="preserve">
|
||||||
<value>Skip building the project prior to running. By default, the project will be built.</value>
|
<value>Do not build project before running. Implies --no-restore.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CommandOptionFrameworkDescription" xml:space="preserve">
|
<data name="CommandOptionFrameworkDescription" xml:space="preserve">
|
||||||
<value>Build and run the app using the specified framework. The framework has to be specified in the project file. </value>
|
<value>Build and run the app using the specified framework. The framework has to be specified in the project file. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CommandOptionNoBuild" xml:space="preserve">
|
|
||||||
<value>Do not build the project before running.</value>
|
|
||||||
</data>
|
|
||||||
<data name="CommandOptionProjectDescription" xml:space="preserve">
|
<data name="CommandOptionProjectDescription" xml:space="preserve">
|
||||||
<value>The path to the project file to run (defaults to the current directory if there is only one project).</value>
|
<value>The path to the project file to run (defaults to the current directory if there is only one project).</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace Microsoft.DotNet.Cli
|
||||||
project: o.SingleArgumentOrDefault("--project"),
|
project: o.SingleArgumentOrDefault("--project"),
|
||||||
launchProfile: o.SingleArgumentOrDefault("--launch-profile"),
|
launchProfile: o.SingleArgumentOrDefault("--launch-profile"),
|
||||||
noLaunchProfile: o.HasOption("--no-launch-profile"),
|
noLaunchProfile: o.HasOption("--no-launch-profile"),
|
||||||
noRestore: o.HasOption("--no-restore"),
|
noRestore: o.HasOption("--no-restore") || o.HasOption("--no-build"),
|
||||||
restoreArgs: o.OptionValuesToBeForwarded(),
|
restoreArgs: o.OptionValuesToBeForwarded(),
|
||||||
args: o.Arguments
|
args: o.Arguments
|
||||||
)),
|
)),
|
||||||
|
@ -51,7 +51,8 @@ namespace Microsoft.DotNet.Cli
|
||||||
"--no-build",
|
"--no-build",
|
||||||
LocalizableStrings.CommandOptionNoBuildDescription,
|
LocalizableStrings.CommandOptionNoBuildDescription,
|
||||||
Accept.NoArguments()),
|
Accept.NoArguments()),
|
||||||
CommonOptions.NoRestoreOption()
|
CommonOptions.NoRestoreOption(),
|
||||||
|
CommonOptions.VerbosityOption()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Před spuštěním vynechá sestavení projektu. Standardně se projekt sestaví.</target>
|
<target state="needs-review-translation">Před spuštěním vynechá sestavení projektu. Standardně se projekt sestaví.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Před spuštěním nesestavovat projekt</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Überspringen Sie die Erstellung des Projekts vor dem Ausführen. Das Projekt wird standardmäßig erstellt.</target>
|
<target state="needs-review-translation">Überspringen Sie die Erstellung des Projekts vor dem Ausführen. Das Projekt wird standardmäßig erstellt.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Erstellen Sie das Projekt nicht vor dem Ausführen.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Omite la compilación del proyecto antes de ejecutarlo. El proyecto se compilará de manera predeterminada.</target>
|
<target state="needs-review-translation">Omite la compilación del proyecto antes de ejecutarlo. El proyecto se compilará de manera predeterminada.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">No se compila el proyecto antes de ejecutarlo.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Ignorez la génération du projet avant l'exécution. Par défaut, le projet est généré.</target>
|
<target state="needs-review-translation">Ignorez la génération du projet avant l'exécution. Par défaut, le projet est généré.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Ne générez pas le projet avant l'exécution.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Consente di ignorare la compilazione del progetto prima dell'esecuzione. Per impostazione predefinita, il progetto verrà compilato.</target>
|
<target state="needs-review-translation">Consente di ignorare la compilazione del progetto prima dell'esecuzione. Per impostazione predefinita, il progetto verrà compilato.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Non compilare il progetto prima dell'esecuzione.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">実行の前に、プロジェクトのビルドをスキップします。既定では、プロジェクトはビルドされます。</target>
|
<target state="needs-review-translation">実行の前に、プロジェクトのビルドをスキップします。既定では、プロジェクトはビルドされます。</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">実行する前にプロジェクトをビルドしません。</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">실행하기 전에 프로젝트를 빌드하지 않습니다. 기본적으로 프로젝트가 빌드됩니다.</target>
|
<target state="needs-review-translation">실행하기 전에 프로젝트를 빌드하지 않습니다. 기본적으로 프로젝트가 빌드됩니다.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">실행하기 전에 프로젝트를 빌드하지 않습니다.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Pomiń kompilację projektu przed uruchomieniem. Domyślnie projekt zostanie skompilowany.</target>
|
<target state="needs-review-translation">Pomiń kompilację projektu przed uruchomieniem. Domyślnie projekt zostanie skompilowany.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Nie kompiluj projektu przed uruchomieniem.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Ignorar a compilação do projeto antes da execução. Por padrão, o projeto será compilado.</target>
|
<target state="needs-review-translation">Ignorar a compilação do projeto antes da execução. Por padrão, o projeto será compilado.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Não compilar o projeto antes da execução.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Пропуск сборки проекта перед запуском. По умолчанию выполняется сборка проекта.</target>
|
<target state="needs-review-translation">Пропуск сборки проекта перед запуском. По умолчанию выполняется сборка проекта.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Не выполнять сборку проекта перед запуском.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">Projeyi çalıştırmadan önce derlemeyi atlayın. Varsayılan olarak, proje derlenir.</target>
|
<target state="needs-review-translation">Projeyi çalıştırmadan önce derlemeyi atlayın. Varsayılan olarak, proje derlenir.</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">Projeyi çalıştırmadan önce derleme.</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">在运行之前跳过项目生成操作。将默认生成项目。</target>
|
<target state="needs-review-translation">在运行之前跳过项目生成操作。将默认生成项目。</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">运行之前不要生成项目。</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -33,13 +33,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CommandOptionNoBuildDescription">
|
<trans-unit id="CommandOptionNoBuildDescription">
|
||||||
<source>Skip building the project prior to running. By default, the project will be built.</source>
|
<source>Do not build project before running. Implies --no-restore.</source>
|
||||||
<target state="translated">在執行之前跳過建置該專案。根據預設,將會建置該專案。</target>
|
<target state="needs-review-translation">在執行之前跳過建置該專案。根據預設,將會建置該專案。</target>
|
||||||
<note />
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="CommandOptionNoBuild">
|
|
||||||
<source>Do not build the project before running.</source>
|
|
||||||
<target state="translated">請勿在執行之前建置專案。</target>
|
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
<trans-unit id="RunCommandExceptionUnableToRunSpecifyFramework">
|
||||||
|
|
|
@ -193,7 +193,7 @@
|
||||||
Logs are written to the provided file.</value>
|
Logs are written to the provided file.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CmdNoBuildDescription" xml:space="preserve">
|
<data name="CmdNoBuildDescription" xml:space="preserve">
|
||||||
<value>Do not build project before testing.</value>
|
<value>Do not build project before testing. Implies --no-restore.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CmdResultsDirectoryDescription" xml:space="preserve">
|
<data name="CmdResultsDirectoryDescription" xml:space="preserve">
|
||||||
<value>The directory where the test results are going to be placed. The specified directory will be created if it does not exist.
|
<value>The directory where the test results are going to be placed. The specified directory will be created if it does not exist.
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace Microsoft.DotNet.Tools.Test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool noRestore = parsedTest.HasOption("--no-restore");
|
bool noRestore = parsedTest.HasOption("--no-restore") || parsedTest.HasOption("--no-build");
|
||||||
|
|
||||||
return new TestCommand(
|
return new TestCommand(
|
||||||
msbuildArgs,
|
msbuildArgs,
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Nesestavujte projekt dříve, než ho otestujete.</target>
|
<target state="needs-review-translation">Nesestavujte projekt dříve, než ho otestujete.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Erstellen Sie das Projekt nicht vor dem Testen.</target>
|
<target state="needs-review-translation">Erstellen Sie das Projekt nicht vor dem Testen.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">El proyecto no se compila antes de probarlo.</target>
|
<target state="needs-review-translation">El proyecto no se compila antes de probarlo.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Ne générez pas le projet avant les tests.</target>
|
<target state="needs-review-translation">Ne générez pas le projet avant les tests.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Il progetto non viene compilato prima del test.</target>
|
<target state="needs-review-translation">Il progetto non viene compilato prima del test.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">テストする前にプロジェクトを構築しないでください。</target>
|
<target state="needs-review-translation">テストする前にプロジェクトを構築しないでください。</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">테스트하기 전에 프로젝트를 빌드하지 않습니다.</target>
|
<target state="needs-review-translation">테스트하기 전에 프로젝트를 빌드하지 않습니다.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Nie kompiluj projektu przed przeprowadzeniem testów.</target>
|
<target state="needs-review-translation">Nie kompiluj projektu przed przeprowadzeniem testów.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Não compile o projeto antes de testar.</target>
|
<target state="needs-review-translation">Não compile o projeto antes de testar.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Не выполнять сборку проектов перед тестированием.</target>
|
<target state="needs-review-translation">Не выполнять сборку проектов перед тестированием.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">Projeyi derlemeden önce test edin.</target>
|
<target state="needs-review-translation">Projeyi derlemeden önce test edin.</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">测试之前不要生成项目。</target>
|
<target state="needs-review-translation">测试之前不要生成项目。</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -125,8 +125,8 @@
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdNoBuildDescription">
|
<trans-unit id="CmdNoBuildDescription">
|
||||||
<source>Do not build project before testing.</source>
|
<source>Do not build project before testing. Implies --no-restore.</source>
|
||||||
<target state="translated">請勿在測試前建置專案。</target>
|
<target state="needs-review-translation">請勿在測試前建置專案。</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="CmdTestAdapterPath">
|
<trans-unit id="CmdTestAdapterPath">
|
||||||
|
|
|
@ -219,7 +219,7 @@
|
||||||
|
|
||||||
<Target Name="CrossgenPublishDir"
|
<Target Name="CrossgenPublishDir"
|
||||||
Condition=" '$(DISABLE_CROSSGEN)' == '' "
|
Condition=" '$(DISABLE_CROSSGEN)' == '' "
|
||||||
AfterTargets="GenerateCliRuntimeConfigurationFiles">
|
AfterTargets="PublishSdks">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<RoslynFiles Include="$(PublishDir)Roslyn\bincore\**\*" />
|
<RoslynFiles Include="$(PublishDir)Roslyn\bincore\**\*" />
|
||||||
<FSharpFiles Include="$(PublishDir)FSharp\**\*" Exclude="$(PublishDir)FSharp\FSharp.Build.dll" />
|
<FSharpFiles Include="$(PublishDir)FSharp\**\*" Exclude="$(PublishDir)FSharp\FSharp.Build.dll" />
|
||||||
|
@ -230,12 +230,13 @@
|
||||||
<RemainingFiles Remove="$(PublishDir)Sdks\**\*" />
|
<RemainingFiles Remove="$(PublishDir)Sdks\**\*" />
|
||||||
<RemainingFiles Remove="$(PublishDir)**\Microsoft.TestPlatform.Extensions.EventLogCollector.dll" />
|
<RemainingFiles Remove="$(PublishDir)**\Microsoft.TestPlatform.Extensions.EventLogCollector.dll" />
|
||||||
|
|
||||||
|
<!-- Add back the .NET Core assemblies in the Sdks folder -->
|
||||||
|
<RemainingFiles Include="$(PublishDir)Sdks\Microsoft.NET.Sdk\tools\netcoreapp2.0\**\*" />
|
||||||
|
<RemainingFiles Include="$(PublishDir)Sdks\NuGet.Build.Tasks.Pack\CoreCLR\**\*" />
|
||||||
|
|
||||||
<!-- Don't try to CrossGen .NET Framework support assemblies for .NET Standard -->
|
<!-- Don't try to CrossGen .NET Framework support assemblies for .NET Standard -->
|
||||||
<RemainingFiles Remove="$(PublishDir)Microsoft\Microsoft.NET.Build.Extensions\net*\**\*" />
|
<RemainingFiles Remove="$(PublishDir)Microsoft\Microsoft.NET.Build.Extensions\net*\**\*" />
|
||||||
|
|
||||||
<!-- Don't try to CrossGen tasks and supporting DLLs compiled for .NET Framework -->
|
|
||||||
<RemainingFiles Remove="$(PublishDir)Microsoft\Microsoft.NET.Build.Extensions\tools\net*\**\*" />
|
|
||||||
|
|
||||||
<!-- Don't crossgen satellite assemblies -->
|
<!-- Don't crossgen satellite assemblies -->
|
||||||
<RoslynFiles Remove="$(PublishDir)Roslyn\bincore\**\*.resources.dll" />
|
<RoslynFiles Remove="$(PublishDir)Roslyn\bincore\**\*.resources.dll" />
|
||||||
<FSharpFiles Remove="$(PublishDir)FSharp\**\*.resources.dll" />
|
<FSharpFiles Remove="$(PublishDir)FSharp\**\*.resources.dll" />
|
||||||
|
@ -297,7 +298,7 @@
|
||||||
CreateSymbols="$(CreateCrossgenSymbols)"
|
CreateSymbols="$(CreateCrossgenSymbols)"
|
||||||
DiasymReaderPath="@(DiasymReaderPath)"
|
DiasymReaderPath="@(DiasymReaderPath)"
|
||||||
PlatformAssemblyPaths="@(PlatformAssemblies);@(FSharpFolders);$(SharedFrameworkNameVersionPath)" />
|
PlatformAssemblyPaths="@(PlatformAssemblies);@(FSharpFolders);$(SharedFrameworkNameVersionPath)" />
|
||||||
|
|
||||||
<Crossgen
|
<Crossgen
|
||||||
SourceAssembly="%(RemainingTargets.FullPath)"
|
SourceAssembly="%(RemainingTargets.FullPath)"
|
||||||
DestinationPath="%(RemainingTargets.FullPath)"
|
DestinationPath="%(RemainingTargets.FullPath)"
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<PackageReference Include="Microsoft.NetCore.App" Version="$(CLI_SharedFrameworkVersion)" />
|
<PackageReference Include="Microsoft.NetCore.App" Version="$(CLI_SharedFrameworkVersion)" />
|
||||||
<PackageReference Include="Microsoft.FSharp.Compiler" Version="$(CLI_FSharp_Version)" />
|
<PackageReference Include="Microsoft.FSharp.Compiler" Version="$(CLI_FSharp_Version)" />
|
||||||
<PackageReference Include="CliDeps.Satellites.FSharp" Version="$(CLI_FSharp_Satellites_Version)" />
|
<PackageReference Include="CliDeps.Satellites.FSharp" Version="$(CLI_FSharp_Satellites_Version)" />
|
||||||
|
<PackageReference Include="System.Runtime.InteropServices" Version="4.3.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -35,10 +36,15 @@
|
||||||
SectionName="%(AssetsToRemoveFromDeps.SectionName)"
|
SectionName="%(AssetsToRemoveFromDeps.SectionName)"
|
||||||
AssetPath="%(AssetsToRemoveFromDeps.Identity)" />
|
AssetPath="%(AssetsToRemoveFromDeps.Identity)" />
|
||||||
|
|
||||||
|
<!-- Deploy deps and runtime config for fsc.exe and fsi.exe. Both apps have exactly the same dependencies so this is Ok -->
|
||||||
<Copy SourceFiles="$(PublishDir)/$(TargetName).runtimeconfig.json;
|
<Copy SourceFiles="$(PublishDir)/$(TargetName).runtimeconfig.json;
|
||||||
$(PublishDir)/$(TargetName).deps.json;"
|
$(PublishDir)/$(TargetName).deps.json;"
|
||||||
DestinationFiles="$(PublishDir)/fsc.runtimeconfig.json;
|
DestinationFiles="$(PublishDir)/fsc.runtimeconfig.json;
|
||||||
$(PublishDir)/fsc.deps.json;"/>
|
$(PublishDir)/fsc.deps.json;"/>
|
||||||
|
<Copy SourceFiles="$(PublishDir)/$(TargetName).runtimeconfig.json;
|
||||||
|
$(PublishDir)/$(TargetName).deps.json;"
|
||||||
|
DestinationFiles="$(PublishDir)/fsi.runtimeconfig.json;
|
||||||
|
$(PublishDir)/fsi.deps.json;"/>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="RemoveFilesAfterPublish"
|
<Target Name="RemoveFilesAfterPublish"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.26419.0
|
VisualStudioVersion = 15.0.27004.2008
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{13B669BE-BB05-4DDF-9536-439F39A36129}") = "dotnet-add-reference.Tests", "dotnet-add-reference.Tests\dotnet-add-reference.Tests.csproj", "{AB63A3E5-76A3-4EE9-A380-8E0C7B7644DC}"
|
Project("{13B669BE-BB05-4DDF-9536-439F39A36129}") = "dotnet-add-reference.Tests", "dotnet-add-reference.Tests\dotnet-add-reference.Tests.csproj", "{AB63A3E5-76A3-4EE9-A380-8E0C7B7644DC}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -74,13 +74,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-store.Tests", "dotne
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-back-compat.Tests", "dotnet-back-compat.Tests\dotnet-back-compat.Tests.csproj", "{27351B2F-325B-4843-9F4C-BC53FD06A7B5}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-back-compat.Tests", "dotnet-back-compat.Tests\dotnet-back-compat.Tests.csproj", "{27351B2F-325B-4843-9F4C-BC53FD06A7B5}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-remove-package.Tests", "dotnet-remove-package.Tests\dotnet-remove-package.Tests.csproj", "{CF517B15-B307-4660-87D5-CC036ADECD4B}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-remove-package.Tests", "dotnet-remove-package.Tests\dotnet-remove-package.Tests.csproj", "{CF517B15-B307-4660-87D5-CC036ADECD4B}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.MSBuildSdkResolver.Tests", "Microsoft.DotNet.MSBuildSdkResolver.Tests\Microsoft.DotNet.MSBuildSdkResolver.Tests.csproj", "{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.MSBuildSdkResolver.Tests", "Microsoft.DotNet.MSBuildSdkResolver.Tests\Microsoft.DotNet.MSBuildSdkResolver.Tests.csproj", "{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-clean.Tests", "dotnet-clean.Tests\dotnet-clean.Tests.csproj", "{D9A582B8-1FE2-45D5-B139-0BA828FE3691}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-clean.Tests", "dotnet-clean.Tests\dotnet-clean.Tests.csproj", "{D9A582B8-1FE2-45D5-B139-0BA828FE3691}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.TestFramework", "Microsoft.DotNet.TestFramework\Microsoft.DotNet.TestFramework.csproj", "{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.TestFramework", "Microsoft.DotNet.TestFramework\Microsoft.DotNet.TestFramework.csproj", "{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.ToolPackageObtainer.Tests", "Microsoft.DotNet.ToolPackageObtainer.Tests\Microsoft.DotNet.ToolPackageObtainer.Tests.csproj", "{C2A907A3-677B-4C73-9AA4-E53613E13C78}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.ShellShimMaker.Tests", "Microsoft.DotNet.ShellShimMaker.Tests\Microsoft.DotNet.ShellShimMaker.Tests.csproj", "{1146EAAC-E434-404A-8198-B4F0CB23BC57}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
@ -490,16 +494,16 @@ Global
|
||||||
{27351B2F-325B-4843-9F4C-BC53FD06A7B5}.Release|x86.Build.0 = Release|Any CPU
|
{27351B2F-325B-4843-9F4C-BC53FD06A7B5}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x64.ActiveCfg = Debug|x64
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x64.Build.0 = Debug|x64
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x86.ActiveCfg = Debug|x86
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x86.Build.0 = Debug|x86
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|Any CPU.Build.0 = Release|Any CPU
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x64.ActiveCfg = Release|x64
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x64.Build.0 = Release|x64
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x86.ActiveCfg = Release|x86
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x86.Build.0 = Release|x86
|
{CF517B15-B307-4660-87D5-CC036ADECD4B}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
@ -514,28 +518,52 @@ Global
|
||||||
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Release|x86.Build.0 = Release|Any CPU
|
{42A0CAB4-FFAD-47D4-9880-C0F4EDCF93DE}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x64.ActiveCfg = Debug|x64
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x64.Build.0 = Debug|x64
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x86.ActiveCfg = Debug|x86
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x86.Build.0 = Debug|x86
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x64.ActiveCfg = Release|x64
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x64.Build.0 = Release|x64
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x86.ActiveCfg = Release|x86
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x86.Build.0 = Release|x86
|
{D9A582B8-1FE2-45D5-B139-0BA828FE3691}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x64.ActiveCfg = Debug|x64
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x64.Build.0 = Debug|x64
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x86.ActiveCfg = Debug|x86
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x86.Build.0 = Debug|x86
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x64.ActiveCfg = Release|x64
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x64.Build.0 = Release|x64
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x86.ActiveCfg = Release|x86
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x86.Build.0 = Release|x86
|
{D23AFC9C-8FD5-45DD-A84C-0E6528C42F0E}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{C2A907A3-677B-4C73-9AA4-E53613E13C78}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{1146EAAC-E434-404A-8198-B4F0CB23BC57}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -545,4 +573,7 @@ Global
|
||||||
{5767D8F0-4ED9-4083-8BDC-ED9E65AA86EF} = {15DDC326-69C3-4081-8AA1-B578B2BDE2C6}
|
{5767D8F0-4ED9-4083-8BDC-ED9E65AA86EF} = {15DDC326-69C3-4081-8AA1-B578B2BDE2C6}
|
||||||
{92BA9F90-E25B-4A1C-9598-2295D3DFC12F} = {BB393A93-1770-4753-B7D6-56F0DD378177}
|
{92BA9F90-E25B-4A1C-9598-2295D3DFC12F} = {BB393A93-1770-4753-B7D6-56F0DD378177}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {7AF6777A-0133-453A-B302-FDD974B8F39C}
|
||||||
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -20,6 +20,7 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
private Mock<IFirstTimeUseNoticeSentinel> _firstTimeUseNoticeSentinelMock;
|
private Mock<IFirstTimeUseNoticeSentinel> _firstTimeUseNoticeSentinelMock;
|
||||||
private Mock<IEnvironmentProvider> _environmentProviderMock;
|
private Mock<IEnvironmentProvider> _environmentProviderMock;
|
||||||
private Mock<IReporter> _reporterMock;
|
private Mock<IReporter> _reporterMock;
|
||||||
|
private Mock<IEnvironmentPath> _pathAdder;
|
||||||
|
|
||||||
public GivenADotnetFirstTimeUseConfigurer()
|
public GivenADotnetFirstTimeUseConfigurer()
|
||||||
{
|
{
|
||||||
|
@ -28,6 +29,7 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock = new Mock<IFirstTimeUseNoticeSentinel>();
|
_firstTimeUseNoticeSentinelMock = new Mock<IFirstTimeUseNoticeSentinel>();
|
||||||
_environmentProviderMock = new Mock<IEnvironmentProvider>();
|
_environmentProviderMock = new Mock<IEnvironmentProvider>();
|
||||||
_reporterMock = new Mock<IReporter>();
|
_reporterMock = new Mock<IReporter>();
|
||||||
|
_pathAdder = new Mock<IEnvironmentPath>();
|
||||||
|
|
||||||
_environmentProviderMock
|
_environmentProviderMock
|
||||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
|
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
|
||||||
|
@ -48,7 +50,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -70,7 +73,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -92,7 +96,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -111,7 +116,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -130,7 +136,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -148,7 +155,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -166,7 +174,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -187,7 +196,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -205,7 +215,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -224,7 +235,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -246,7 +258,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -258,6 +271,26 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_reporterMock.Verify(r => r.Write(It.IsAny<string>()), Times.Never);
|
_reporterMock.Verify(r => r.Write(It.IsAny<string>()), Times.Never);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void It_adds_executable_package_path_to_environment_path_when_the_first_notice_sentinel_does_not_exist()
|
||||||
|
{
|
||||||
|
_nugetCacheSentinelMock.Setup(n => n.Exists()).Returns(true);
|
||||||
|
_firstTimeUseNoticeSentinelMock.Setup(n => n.Exists()).Returns(false);
|
||||||
|
|
||||||
|
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||||
|
_nugetCachePrimerMock.Object,
|
||||||
|
new FakeCreateWillExistNuGetCacheSentinel(false, true),
|
||||||
|
new FakeCreateWillExistFirstTimeUseNoticeSentinel(false),
|
||||||
|
_environmentProviderMock.Object,
|
||||||
|
_reporterMock.Object,
|
||||||
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
_pathAdder.Verify(p => p.AddPackageExecutablePathToUserPath(), Times.AtLeastOnce);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void It_prints_the_unauthorized_notice_if_the_cache_sentinel_reports_Unauthorized()
|
public void It_prints_the_unauthorized_notice_if_the_cache_sentinel_reports_Unauthorized()
|
||||||
{
|
{
|
||||||
|
@ -269,7 +302,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
|
@ -295,11 +329,69 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_firstTimeUseNoticeSentinelMock.Object,
|
_firstTimeUseNoticeSentinelMock.Object,
|
||||||
_environmentProviderMock.Object,
|
_environmentProviderMock.Object,
|
||||||
_reporterMock.Object,
|
_reporterMock.Object,
|
||||||
CliFallbackFolderPath);
|
CliFallbackFolderPath,
|
||||||
|
_pathAdder.Object);
|
||||||
|
|
||||||
dotnetFirstTimeUseConfigurer.Configure();
|
dotnetFirstTimeUseConfigurer.Configure();
|
||||||
|
|
||||||
_nugetCachePrimerMock.Verify(r => r.PrimeCache(), Times.Never);
|
_nugetCachePrimerMock.Verify(r => r.PrimeCache(), Times.Never);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class FakeCreateWillExistFirstTimeUseNoticeSentinel : IFirstTimeUseNoticeSentinel
|
||||||
|
{
|
||||||
|
private bool _exists;
|
||||||
|
|
||||||
|
public FakeCreateWillExistFirstTimeUseNoticeSentinel(bool exists)
|
||||||
|
{
|
||||||
|
_exists = exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Exists()
|
||||||
|
{
|
||||||
|
return _exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateIfNotExists()
|
||||||
|
{
|
||||||
|
_exists = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class FakeCreateWillExistNuGetCacheSentinel : INuGetCacheSentinel
|
||||||
|
{
|
||||||
|
private bool _inProgressSentinelAlreadyExists;
|
||||||
|
private bool _exists;
|
||||||
|
|
||||||
|
public FakeCreateWillExistNuGetCacheSentinel(bool inProgressSentinelAlreadyExists, bool exists)
|
||||||
|
{
|
||||||
|
_inProgressSentinelAlreadyExists = inProgressSentinelAlreadyExists;
|
||||||
|
_exists = exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool InProgressSentinelAlreadyExists()
|
||||||
|
{
|
||||||
|
return _inProgressSentinelAlreadyExists;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Exists()
|
||||||
|
{
|
||||||
|
return _exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateIfNotExists()
|
||||||
|
{
|
||||||
|
_exists = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UnauthorizedAccess { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue