Merge branch 'master' into loc_20180129_master

This commit is contained in:
Nick Guerrera 2018-02-08 15:48:10 -08:00
commit 6677d8f0b6
118 changed files with 2252 additions and 1405 deletions

View file

@ -1,4 +1,4 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2020
MinimumVisualStudioVersion = 10.0.40219.1
@ -236,6 +236,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Tools.Test
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "tool_launcher", "src\tool_launcher\tool_launcher.csproj", "{EDF19BE6-F20F-4AD0-8E3B-E837030726A5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-install-tool.Tests", "test\dotnet-install-tool.Tests\dotnet-install-tool.Tests.csproj", "{8FE9D802-57F3-493B-9E14-72DF905E3838}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -1692,6 +1694,30 @@ Global
{E442F4C1-08DB-470F-B9A6-197444CD0295}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
{E442F4C1-08DB-470F-B9A6-197444CD0295}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
{E442F4C1-08DB-470F-B9A6-197444CD0295}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Debug|x64.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Debug|x64.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Debug|x86.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Debug|x86.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Release|Any CPU.Build.0 = Release|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Release|x64.ActiveCfg = Release|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Release|x64.Build.0 = Release|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Release|x86.ActiveCfg = Release|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.Release|x86.Build.0 = Release|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{8FE9D802-57F3-493B-9E14-72DF905E3838}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1767,6 +1793,7 @@ Global
{91BFE800-1624-4A58-A1CE-339705A8FFD0} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
{EDF19BE6-F20F-4AD0-8E3B-E837030726A5} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
{E442F4C1-08DB-470F-B9A6-197444CD0295} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
{8FE9D802-57F3-493B-9E14-72DF905E3838} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B526D2CE-EE2D-4AD4-93EF-1867D90FF1F5}

View file

@ -203,3 +203,4 @@ License
-------
By downloading the .zip you are agreeing to the terms in the project [EULA](https://aka.ms/dotnet-core-eula).

View file

@ -1,9 +1,10 @@
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Product>Sdk</Product>
<IsNotOrchestratedPublish>true</IsNotOrchestratedPublish>
<IsNotOrchestratedPublish Condition="'$(PB_PublishBlobFeedUrl)' != ''">false</IsNotOrchestratedPublish>
<BlobStoragePartialRelativePath>Sdk</BlobStoragePartialRelativePath>
<BlobStoragePartialRelativePath Condition="'$(IsNotOrchestratedPublish)' == 'false'">assets/$(BlobStoragePartialRelativePath)</BlobStoragePartialRelativePath>
<BlobStoragePartialRelativePath>$(Product)</BlobStoragePartialRelativePath>
<BlobStoragePartialRelativePath Condition="'$(IsNotOrchestratedPublish)' == 'false'">assets/$(Product)</BlobStoragePartialRelativePath>
<!-- Values related to the download of assets from blob storage -->
<DefaultCoreSetupBlobRootUrl>https://dotnetcli.azureedge.net/dotnet/</DefaultCoreSetupBlobRootUrl>

View file

@ -59,7 +59,7 @@
Condition="!Exists('$(AspNetCoreSharedFxArchiveFile)')">
<Url>$(CoreSetupRootUrl)$(AspNetCoreVersion)/$(AspNetCoreSharedFxArchiveFileName)$(CoreSetupBlobAccessTokenParam)</Url>
<DownloadFileName>$(AspNetCoreSharedFxArchiveFile)</DownloadFileName>
<ExtractDestination>$(SharedFrameworkPublishDirectory)</ExtractDestination>
<ExtractDestination>$(AspNetCoreSharedFxPublishDirectory)</ExtractDestination>
</_DownloadAndExtractItem>
<_DownloadAndExtractItem Include="CombinedSharedHostAndFrameworkArchive"

View file

@ -2,6 +2,7 @@
<ItemGroup>
<BundledSdk Include="NuGet.Build.Tasks.Pack" Version="$(NuGetBuildTasksPackPackageVersion)" />
<BundledSdk Include="Microsoft.NET.Sdk" Version="$(MicrosoftNETSdkPackageVersion)" />
<BundledSdk Include="Microsoft.NET.Sdk.Razor" Version="$(MicrosoftNETSdkRazorPackageVersion)" />
<BundledSdk Include="Microsoft.NET.Sdk.Web" Version="$(MicrosoftNETSdkWebPackageVersion)" />
<BundledSdk Include="Microsoft.NET.Sdk.Publish" Version="$(MicrosoftNETSdkPublishPackageVersion)" />
<BundledSdk Include="Microsoft.NET.Sdk.Web.ProjectSystem" Version="$(MicrosoftNETSdkWebProjectSystemPackageVersion)" />

30
build/CLI_Baseline.csv Normal file
View file

@ -0,0 +1,30 @@
sdk\*\microsoft.testplatform.vstestconsole.translationlayer.xml,unsigned,oss
sdk\*\sdks\nuget.build.tasks.pack\*\nuget.build.tasks.pack.xml,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\additional-methods.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\additional-methods.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\additional-methods.min.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\bootstrap.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\bootstrap.min.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\glyphicons-halflings-regular.ttf,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.min.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.min.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.unobtrusive.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.unobtrusive.min.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\npm.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\site.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\site.min.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\app.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\app.test.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\configurestore.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\counter.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\fetchdata.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\home.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\index.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\karma.conf.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\layout.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\navmenu.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\protractor.conf.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\registerserviceworker.js,unsigned,oss
sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\weatherforecasts.js,unsigned,oss
1 sdk\*\microsoft.testplatform.vstestconsole.translationlayer.xml unsigned oss
2 sdk\*\sdks\nuget.build.tasks.pack\*\nuget.build.tasks.pack.xml unsigned oss
3 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\additional-methods.js unsigned oss
4 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\additional-methods.js unsigned oss
5 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\additional-methods.min.js unsigned oss
6 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\bootstrap.js unsigned oss
7 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\bootstrap.min.js unsigned oss
8 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\glyphicons-halflings-regular.ttf unsigned oss
9 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.js unsigned oss
10 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.min.js unsigned oss
11 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.js unsigned oss
12 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.min.js unsigned oss
13 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.unobtrusive.js unsigned oss
14 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\jquery.validate.unobtrusive.min.js unsigned oss
15 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\npm.js unsigned oss
16 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\site.js unsigned oss
17 sdk\*\templates\microsoft_dotnet_web_projecttemplates*nupkgdir\site.min.js unsigned oss
18 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\app.js unsigned oss
19 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\app.test.js unsigned oss
20 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\configurestore.js unsigned oss
21 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\counter.js unsigned oss
22 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\fetchdata.js unsigned oss
23 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\home.js unsigned oss
24 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\index.js unsigned oss
25 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\karma.conf.js unsigned oss
26 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\layout.js unsigned oss
27 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\navmenu.js unsigned oss
28 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\protractor.conf.js unsigned oss
29 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\registerserviceworker.js unsigned oss
30 sdk\*\templates\microsoft_dotnet_web_spa_projecttemplates*nupkgdir\weatherforecasts.js unsigned oss

View file

@ -1,22 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MicrosoftAspNetCoreAllPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreAllPackageVersion>
<MicrosoftNETCoreAppPackageVersion>2.1.0-preview1-26116-04</MicrosoftNETCoreAppPackageVersion>
<MicrosoftAspNetCoreAllPackageVersion>2.1.0-preview2-30057</MicrosoftAspNetCoreAllPackageVersion>
<MicrosoftNETCoreAppPackageVersion>2.1.0-preview2-26131-06</MicrosoftNETCoreAppPackageVersion>
<MicrosoftNETCoreDotNetHostResolverPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</MicrosoftNETCoreDotNetHostResolverPackageVersion>
<MicrosoftBuildPackageVersion>15.6.0-preview-000054-1286830</MicrosoftBuildPackageVersion>
<MicrosoftBuildFrameworkPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildFrameworkPackageVersion>
<MicrosoftBuildRuntimePackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildRuntimePackageVersion>
<MicrosoftBuildLocalizationPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildLocalizationPackageVersion>
<MicrosoftBuildUtilitiesCorePackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildUtilitiesCorePackageVersion>
<MicrosoftFSharpCompilerPackageVersion>4.2.0-rtm-171122-0</MicrosoftFSharpCompilerPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>2.7.0-beta3-62419-03</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftFSharpCompilerPackageVersion>10.1.2-rtm-180131-0</MicrosoftFSharpCompilerPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>2.8.0-beta1-62608-01</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftNETCoreCompilersPackageVersion>$(MicrosoftCodeAnalysisCSharpPackageVersion)</MicrosoftNETCoreCompilersPackageVersion>
<MicrosoftCodeAnalysisBuildTasksPackageVersion>$(MicrosoftCodeAnalysisCSharpPackageVersion)</MicrosoftCodeAnalysisBuildTasksPackageVersion>
<MicrosoftNetCompilersNetcorePackageVersion>$(MicrosoftCodeAnalysisCSharpPackageVersion)</MicrosoftNetCompilersNetcorePackageVersion>
<MicrosoftNETSdkPackageVersion>2.1.0-preview1-62516-03</MicrosoftNETSdkPackageVersion>
<MicrosoftNETSdkPackageVersion>2.1.300-preview2-62607-04</MicrosoftNETSdkPackageVersion>
<MicrosoftNETBuildExtensionsPackageVersion>$(MicrosoftNETSdkPackageVersion)</MicrosoftNETBuildExtensionsPackageVersion>
<MicrosoftNETSdkWebPackageVersion>2.0.0-rel-20171110-671</MicrosoftNETSdkWebPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>2.1.0-preview2-30028</MicrosoftNETSdkRazorPackageVersion>
<MicrosoftNETSdkWebPackageVersion>2.1.0-release21-20180126-1326543</MicrosoftNETSdkWebPackageVersion>
<MicrosoftNETSdkPublishPackageVersion>$(MicrosoftNETSdkWebPackageVersion)</MicrosoftNETSdkPublishPackageVersion>
<MicrosoftNETSdkWebProjectSystemPackageVersion>$(MicrosoftNETSdkWebPackageVersion)</MicrosoftNETSdkWebProjectSystemPackageVersion>
<MicrosoftDotNetCommonItemTemplatesPackageVersion>1.0.1-beta3-20180104-1263555</MicrosoftDotNetCommonItemTemplatesPackageVersion>
@ -27,12 +28,12 @@
<MicrosoftTemplateEngineCliLocalizationPackageVersion>$(MicrosoftTemplateEngineCliPackageVersion)</MicrosoftTemplateEngineCliLocalizationPackageVersion>
<MicrosoftTemplateEngineOrchestratorRunnableProjectsPackageVersion>$(MicrosoftTemplateEngineCliPackageVersion)</MicrosoftTemplateEngineOrchestratorRunnableProjectsPackageVersion>
<MicrosoftTemplateEngineUtilsPackageVersion>$(MicrosoftTemplateEngineCliPackageVersion)</MicrosoftTemplateEngineUtilsPackageVersion>
<MicrosoftDotNetPlatformAbstractionsPackageVersion>2.1.0-preview1-26116-04</MicrosoftDotNetPlatformAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyModelPackageVersion>2.1.0-preview1-26116-04</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftDotNetPlatformAbstractionsPackageVersion>2.1.0-preview2-26131-06</MicrosoftDotNetPlatformAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyModelPackageVersion>2.1.0-preview2-26131-06</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftDotNetCliCommandLinePackageVersion>0.1.1-alpha-174</MicrosoftDotNetCliCommandLinePackageVersion>
<MicrosoftDotNetProjectJsonMigrationPackageVersion>1.2.1-alpha-002133</MicrosoftDotNetProjectJsonMigrationPackageVersion>
<MicrosoftDotNetToolsMigrateCommandPackageVersion>$(MicrosoftDotNetProjectJsonMigrationPackageVersion)</MicrosoftDotNetToolsMigrateCommandPackageVersion>
<MicrosoftDotNetArchivePackageVersion>0.2.0-beta-000059</MicrosoftDotNetArchivePackageVersion>
<MicrosoftDotNetArchivePackageVersion>0.2.0-beta-62606-02</MicrosoftDotNetArchivePackageVersion>
<MicrosoftDiaSymReaderNativePackageVersion>1.6.0-beta2-25304</MicrosoftDiaSymReaderNativePackageVersion>
<NuGetBuildTasksPackageVersion>4.7.0-preview1-4846</NuGetBuildTasksPackageVersion>
<NuGetBuildTasksPackPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetBuildTasksPackPackageVersion>
@ -43,21 +44,19 @@
<NuGetPackagingPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetPackagingPackageVersion>
<NuGetProjectModelPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetProjectModelPackageVersion>
<NuGetVersioningPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetVersioningPackageVersion>
<MicrosoftNETTestSdkPackageVersion>15.6.0-preview-20171211-02</MicrosoftNETTestSdkPackageVersion>
<MicrosoftNETTestSdkPackageVersion>15.6.0-preview-20180109-01</MicrosoftNETTestSdkPackageVersion>
<MicrosoftTestPlatformCLIPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformCLIPackageVersion>
<MicrosoftTestPlatformBuildPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformBuildPackageVersion>
<XliffTasksPackageVersion>0.2.0-beta-000042</XliffTasksPackageVersion>
<MicroBuildCorePackageVersion>0.2.0</MicroBuildCorePackageVersion>
<CLI_Deps_Satellites_Build>pre-20171122-1</CLI_Deps_Satellites_Build>
<CliDepsSatellitesRoslynPackageVersion>2.6.0-$(CLI_Deps_Satellites_Build)</CliDepsSatellitesRoslynPackageVersion>
<CliDepsSatellitesFSharpPackageVersion>4.4.1-$(CLI_Deps_Satellites_Build)</CliDepsSatellitesFSharpPackageVersion>
<CliDepsSatellitesRoslynPackageVersion>2.6.0-pre-20171122-1</CliDepsSatellitesRoslynPackageVersion>
</PropertyGroup>
<!-- NOTE: The property group above is in alignment with orchestrated build version naming conventions. -->
<Import Condition=" Exists('$(OrchestratedPackageVersionsProps)') " Project="$(OrchestratedPackageVersionsProps)" />
<PropertyGroup>
<CLI_NETStandardLibraryNETFrameworkVersion>2.0.1-servicing-25908-02</CLI_NETStandardLibraryNETFrameworkVersion>
<CLI_NETStandardLibraryNETFrameworkVersion>2.0.1-servicing-26011-01</CLI_NETStandardLibraryNETFrameworkVersion>
<SharedHostVersion>$(MicrosoftNETCoreAppPackageVersion)</SharedHostVersion>
<HostFxrVersion>$(MicrosoftNETCoreAppPackageVersion)</HostFxrVersion>
@ -66,9 +65,9 @@
<!-- infrastructure and test only dependencies -->
<PropertyGroup>
<VersionToolsVersion>2.1.0-prerelease-02411-04</VersionToolsVersion>
<BuildTasksFeedToolVersion>2.1.0-prerelease-02430-04</BuildTasksFeedToolVersion>
<VersionToolsVersion>$(BuildTasksFeedToolVersion)</VersionToolsVersion>
<DotnetDebToolVersion>2.0.0-preview2-25331-01</DotnetDebToolVersion>
<BuildTasksFeedToolVersion>2.1.0-prerelease-02411-04</BuildTasksFeedToolVersion>
</PropertyGroup>
</Project>

View file

@ -97,23 +97,25 @@
of our build against Microsoft.NETCore.App to find the correct NETStandard.Library version
-->
<ItemGroup>
<_NETStandardLibraryVersions Include="@(PackageDefinitions->'%(Version)')"
<_NETStandardLibraryPackageVersions Include="@(PackageDefinitions->'%(Version)')"
Condition="%(PackageDefinitions.Name) == 'NetStandard.Library'" />
<_NETCorePlatformsImplicitPackageVersion Include="@(PackageDefinitions->'%(Version)')"
<_NETCorePlatformsPackageVersions Include="@(PackageDefinitions->'%(Version)')"
Condition="%(PackageDefinitions.Name) == 'Microsoft.NETCore.Platforms'" />
</ItemGroup>
<Error Condition="@(_NETStandardLibraryVersions->Distinct()->Count()) != 1"
<Error Condition="@(_NETStandardLibraryPackageVersions->Distinct()->Count()) != 1"
Text="Failed to determine the NETStandard.Library version pulled in Microsoft.NETCore.App" />
<Error Condition="@(_NETCorePlatformsPackageVersions->Distinct()->Count()) != 1"
Text="Failed to determine the Microsoft.NETCore.Platforms version pulled in Microsoft.NETCore.App" />
<PropertyGroup>
<_NETCoreAppPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</_NETCoreAppPackageVersion>
<_NETStandardPackageVersion>@(_NETStandardLibraryVersions->Distinct())</_NETStandardPackageVersion>
<_NETCorePlatformsImplicitPackageVersion>@(_NETCorePlatformsImplicitPackageVersion->Distinct())</_NETCorePlatformsImplicitPackageVersion>
<_NETStandardLibraryPackageVersion>@(_NETStandardLibraryPackageVersions->Distinct())</_NETStandardLibraryPackageVersion>
<_NETCorePlatformsPackageVersion>@(_NETCorePlatformsPackageVersions->Distinct())</_NETCorePlatformsPackageVersion>
<!-- Use only major and minor in target framework version -->
<_NETCoreAppTargetFrameworkVersion>$(_NETCoreAppPackageVersion.Split('.')[0]).$(_NETCoreAppPackageVersion.Split('.')[1])</_NETCoreAppTargetFrameworkVersion>
<_NETStandardTargetFrameworkVersion>$(_NETStandardPackageVersion.Split('.')[0]).$(_NETStandardPackageVersion.Split('.')[1])</_NETStandardTargetFrameworkVersion>
<_NETStandardTargetFrameworkVersion>$(_NETStandardLibraryPackageVersion.Split('.')[0]).$(_NETStandardLibraryPackageVersion.Split('.')[1])</_NETStandardTargetFrameworkVersion>
<BundledVersionsPropsContent>
<![CDATA[
@ -133,8 +135,8 @@ Copyright (c) .NET Foundation. All rights reserved.
<BundledNETCoreAppTargetFrameworkVersion>$(_NETCoreAppTargetFrameworkVersion)</BundledNETCoreAppTargetFrameworkVersion>
<BundledNETCoreAppPackageVersion>$(_NETCoreAppPackageVersion)</BundledNETCoreAppPackageVersion>
<BundledNETStandardTargetFrameworkVersion>$(_NETStandardTargetFrameworkVersion)</BundledNETStandardTargetFrameworkVersion>
<BundledNETStandardPackageVersion>$(_NETStandardPackageVersion)</BundledNETStandardPackageVersion>
<NETCorePlatformsImplicitPackageVersion>$(_NETCorePlatformsImplicitPackageVersion)</NETCorePlatformsImplicitPackageVersion>
<BundledNETStandardPackageVersion>$(_NETStandardLibraryPackageVersion)</BundledNETStandardPackageVersion>
<BundledNETCorePlatformsPackageVersion>$(_NETCorePlatformsPackageVersion)</BundledNETCorePlatformsPackageVersion>
</PropertyGroup>
</Project>
]]>

View file

@ -4,7 +4,7 @@
<ItemGroup>
<NugetConfigPrivateFeeds Include="$(ExternalRestoreSources.Split(';'))" />
</ItemGroup>
<PropertyGroup>
<NugetConfigHeader>
<![CDATA[
@ -28,9 +28,8 @@
<add key="xunit" value="https://www.myget.org/F/xunit/api/v3/index.json" />
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="vstest" value="https://dotnet.myget.org/F/vstest/api/v3/index.json" />
<add key="web-api" value="https://dotnet.myget.org/F/dotnet-web/api/v3/index.json" />
<add key="symreader-native" value="https://dotnet.myget.org/F/symreader-native/api/v3/index.json" />
<add key="nuget-build" value="https://dotnet.myget.org/F/nuget-build/api/v3/index.json" />
<add key="nuget-build" value="https://dotnet.myget.org/F/nuget-build/api/v3/index.json" />
<add key="dotnet-corefxlab" value="https://dotnet.myget.org/F/dotnet-corefxlab/api/v3/index.json" />
]]>
</NugetConfigCLIFeeds>
@ -40,13 +39,13 @@
</configuration>
]]>
</NugetConfigSuffix>
</PropertyGroup>
<WriteLinesToFile File="$(GeneratedNuGetConfig)"
Lines="$(NugetConfigHeader)"
Overwrite="true" />
<WriteLinesToFile Condition="'$(ExternalRestoreSources)' != '' and '$(DotNetBuildOffline)' != 'true'"
File="$(GeneratedNuGetConfig)"
Lines="&lt;add key=&quot;PrivateBlobFeed&quot; value=&quot;%(NugetConfigPrivateFeeds.Identity)&quot; /&gt;"

View file

@ -20,15 +20,14 @@
<IntermediateDirectory>$(BaseOutputDirectory)/intermediate</IntermediateDirectory>
<PackagesDirectory>$(BaseOutputDirectory)/packages</PackagesDirectory>
<SharedFrameworkPublishDirectory>$(IntermediateDirectory)/sharedFrameworkPublish</SharedFrameworkPublishDirectory>
<!-- The 'AspNetRuntimePackageStorePublishDirectory' needs to be very short due to path length constraints on Win8.1 -->
<AspNetRuntimePackageStorePublishDirectory>$(BaseOutputDirectory)/AspRT</AspNetRuntimePackageStorePublishDirectory>
<AspNetCoreSharedFxPublishDirectory>$(IntermediateDirectory)/aspnetSharedFxPublish</AspNetCoreSharedFxPublishDirectory>
<BackwardsCompatibleSharedFrameworksPublishDirectory>$(IntermediateDirectory)/backwardsCompatibleSharedFrameworksPublish</BackwardsCompatibleSharedFrameworksPublishDirectory>
<TestOutputDir>$(BaseOutputDirectory)/test/</TestOutputDir>
<DotnetInOutputDirectory>$(OutputDirectory)/dotnet$(ExeExtension)</DotnetInOutputDirectory>
<GeneratedMSBuildExtensionsDirectory>$(IntermediateDirectory)/GeneratedMSBuildExtensions</GeneratedMSBuildExtensionsDirectory>
<MSBuildExtensionsLayoutDirectory>$(IntermediateDirectory)/MSBuildExtensionsLayout</MSBuildExtensionsLayoutDirectory>
<SdkResolverOutputDirectory>$(MSBuildExtensionsLayoutDirectory)/MSBuildSdkResolver</SdkResolverOutputDirectory>
<NextStagePropsPath>$(BaseOutputDirectory)/PreviousStage.props</NextStagePropsPath>
</PropertyGroup>
</Project>

View file

@ -84,6 +84,7 @@
ManifestBuildId="$(FullNugetVersion)"
ManifestCommit="$(CommitHash)"
ManifestName="$(BuildName)"
ManifestBuildData="ProductVersion=$(FullNugetVersion)"
Overwrite="false"
PublishFlatContainer="true"
SkipCreateManifest="$(IsNotOrchestratedPublish)" />

View file

@ -40,6 +40,7 @@
<!-- Built binaries -->
<FilesToSign Include="$(OutputDirectory)/sdk/**/csc.exe;
$(OutputDirectory)/sdk/**/csc.dll;
$(OutputDirectory)/sdk/**/VBCSCompiler.dll;
$(OutputDirectory)/sdk/**/vbc.exe;
$(OutputDirectory)/sdk/**/vbc.dll;
$(OutputDirectory)/sdk/**/fsc.exe;

View file

@ -120,5 +120,4 @@
<GeneratedInstallers Include="$(SdkInstallerFile)" />
</ItemGroup>
</Target>
</Project>

View file

@ -2,7 +2,7 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- AcquireWix Properties -->
<PropertyGroup>
<WixVersion>3.10.2</WixVersion>
<WixVersion>3.10.4</WixVersion>
<WixDownloadUrl>https://dotnetcli.azureedge.net/build/wix/wix.$(WixVersion).zip</WixDownloadUrl>
<WixRoot>$(IntermediateDirectory)/WixTools/$(WixVersion)</WixRoot>
<WixDestinationPath>$(WixRoot)/WixTools.$(WixVersion).zip</WixDestinationPath>

View file

@ -16,7 +16,7 @@
<CombinedHostHostFxrFrameworkSdkInput Include="$(OutputDirectory)/**/*" />
<SdkLanguagePackInput Include="$(OutputDirectory)/sdk/**/$(SatelliteAssemblies)" />
<AspNetRuntimeFilesInput Include="$(AspNetRuntimePackageStorePublishDirectory)/**/*" />
<AspNetRuntimeFilesInput Include="$(AspNetCoreSharedFxPublishDirectory)/**/*" />
<MSBuildExtensionsInput Include="$(MSBuildExtensionsLayoutDirectory)/msbuildExtensions/**/*" />
<MSBuildExtensionsVerInput Include="$(MSBuildExtensionsLayoutDirectory)/msbuildExtensions-ver/**/*" />

View file

@ -33,6 +33,7 @@
ManifestBuildId="$(FullNugetVersion)"
ManifestCommit="$(CommitHash)"
ManifestName="$(BuildName)"
ManifestBuildData="ProductVersion=$(FullNugetVersion)"
Overwrite="$(OverwriteOnPublish)"
PublishFlatContainer="true"
SkipCreateManifest="$(IsNotOrchestratedPublish)" />
@ -51,6 +52,7 @@
ManifestBuildId="$(FullNugetVersion)"
ManifestCommit="$(CommitHash)"
ManifestName="$(BuildName)"
ManifestBuildData="ProductVersion=$(FullNugetVersion)"
Overwrite="$(OverwriteOnPublish)"
PublishFlatContainer="true"
SkipCreateManifest="$(IsNotOrchestratedPublish)" />

View file

@ -17,6 +17,7 @@
ManifestBuildId="$(FullNugetVersion)"
ManifestCommit="$(CommitHash)"
ManifestName="$(BuildName)"
ManifestBuildData="ProductVersion=$(FullNugetVersion)"
Overwrite="true"
PublishFlatContainer="false"
SkipCreateManifest="$(IsNotOrchestratedPublish)" />

View file

@ -10,6 +10,7 @@
<ItemGroup>
<PackageReference Include="$(DependencyPackageName)" Version="$(DependencyPackageVersion)" />
<PackageReference Condition="'$(DependencyPackageName)' == 'Microsoft.NET.Sdk.Web'" Include="Microsoft.NET.Sdk" Version="$(MicrosoftNETSdkPackageVersion)" />
<PackageReference Condition="'$(DependencyPackageName)' == 'Microsoft.NET.Sdk.Web'" Include="Microsoft.NET.Sdk.Razor" Version="$(MicrosoftNETSdkRazorPackageVersion)" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View file

@ -12,7 +12,7 @@
<PackageReference Include="NETStandard.Library" Version="1.6.0" />
<PackageReference Include="System.Diagnostics.Process" Version="4.1.0" />
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.1.0" />
<PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="1.0.1-beta-000933" />
<PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="1.0.3" />
</ItemGroup>
</Project>

View file

@ -19,11 +19,12 @@
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.4.8" />
<PackageReference Include="Microsoft.CSharp" Version="4.0.1" />
<PackageReference Include="System.Dynamic.Runtime" Version="4.0.11" />
<PackageReference Include="System.Reflection.Metadata" Version="1.4.1-beta-24410-02" />
<PackageReference Include="System.Reflection.Metadata" Version="1.4.2" />
<PackageReference Include="System.Runtime.Serialization.Primitives" Version="4.1.1" />
<PackageReference Include="System.Xml.XmlSerializer" Version="4.0.11" />
<PackageReference Include="WindowsAzure.Storage" Version="7.2.1" />
<PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="2.0.0" />
<PackageReference Include="Microsoft.DotNet.VersionTools" Version="$(VersionToolsVersion)" />
<PackageReference Include="Microsoft.DotNet.Build.Tasks.Feed" Version="$(BuildTasksFeedToolVersion)" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.0.0" />

View file

@ -15,12 +15,12 @@
<PackageReference Include="NETStandard.Library" Version="1.6.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.0.1" />
<PackageReference Include="System.Dynamic.Runtime" Version="4.0.11" />
<PackageReference Include="System.Reflection.Metadata" Version="1.4.1-beta-24410-02" />
<PackageReference Include="System.Reflection.Metadata" Version="1.4.2" />
<PackageReference Include="System.Runtime.Serialization.Primitives" Version="4.1.1" />
<PackageReference Include="System.Threading.Thread" Version="4.0.0" />
<PackageReference Include="System.Xml.XmlSerializer" Version="4.0.11" />
<PackageReference Include="WindowsAzure.Storage" Version="7.2.1" />
<PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="1.0.1-beta-000933" />
<PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="1.0.3" />
</ItemGroup>
</Project>

View file

@ -39,12 +39,15 @@ namespace Microsoft.DotNet.Scripts
private Lazy<string> _dotNetVersionUrl = new Lazy<string>(() => GetEnvironmentVariable("DOTNET_VERSION_URL", "https://raw.githubusercontent.com/dotnet/versions/master/build-info"));
private Lazy<string> _coreSetupVersionFragment = new Lazy<string>(() => GetEnvironmentVariable("CORESETUP_VERSION_FRAGMENT", GetDefaultCoreSetupVersionFragment()));
private Lazy<string> _roslynVersionFragment = new Lazy<string>(() => GetEnvironmentVariable("ROSLYN_VERSION_FRAGMENT"));
private Lazy<string> _gitHubUpstreamOwner = new Lazy<string>(() => GetEnvironmentVariable("GITHUB_UPSTREAM_OWNER", "dotnet"));
private Lazy<string> _gitHubProject = new Lazy<string>(() => GetEnvironmentVariable("GITHUB_PROJECT", "cli"));
private Lazy<string> _gitHubUpstreamBranch = new Lazy<string>(() => GetEnvironmentVariable("GITHUB_UPSTREAM_BRANCH", GetDefaultUpstreamBranch()));
private Lazy<string[]> _gitHubPullRequestNotifications = new Lazy<string[]>(() =>
GetEnvironmentVariable("GITHUB_PULL_REQUEST_NOTIFICATIONS", "")
.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries));
private Config()
{
}
@ -54,6 +57,8 @@ namespace Microsoft.DotNet.Scripts
public string Password => _password.Value;
public string DotNetVersionUrl => _dotNetVersionUrl.Value;
public string CoreSetupVersionFragment => _coreSetupVersionFragment.Value;
public string RoslynVersionFragment => _roslynVersionFragment.Value;
public bool HasRoslynVersionFragment => !string.IsNullOrEmpty(RoslynVersionFragment);
public string GitHubUpstreamOwner => _gitHubUpstreamOwner.Value;
public string GitHubProject => _gitHubProject.Value;
public string GitHubUpstreamBranch => _gitHubUpstreamBranch.Value;

View file

@ -4,6 +4,7 @@
using Microsoft.DotNet.VersionTools;
using Microsoft.DotNet.VersionTools.Automation;
using Microsoft.DotNet.VersionTools.Dependencies;
using Microsoft.DotNet.VersionTools.Dependencies.BuildOutput;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@ -27,9 +28,14 @@ namespace Microsoft.DotNet.Scripts
buildInfos.Add(GetBuildInfo("CoreSetup", s_config.CoreSetupVersionFragment, fetchLatestReleaseFile: false));
if (s_config.HasRoslynVersionFragment)
{
buildInfos.Add(GetBuildInfo("Roslyn", s_config.RoslynVersionFragment, fetchLatestReleaseFile: false));
}
IEnumerable<IDependencyUpdater> updaters = GetUpdaters();
var dependencyBuildInfos = buildInfos.Select(buildInfo =>
new DependencyBuildInfo(
new BuildDependencyInfo(
buildInfo,
upgradeStableVersions: true,
disabledPackages: Enumerable.Empty<string>()));
@ -50,11 +56,14 @@ namespace Microsoft.DotNet.Scripts
body += PullRequestCreator.NotificationString(s_config.GitHubPullRequestNotifications);
}
new PullRequestCreator(gitHubAuth, origin, upstreamBranch)
new PullRequestCreator(gitHubAuth)
.CreateOrUpdateAsync(
suggestedMessage,
suggestedMessage + $" ({upstreamBranch.Name})",
body)
body,
upstreamBranch,
origin,
new PullRequestOptions())
.Wait();
}
}
@ -84,6 +93,11 @@ namespace Microsoft.DotNet.Scripts
yield return CreateRegexUpdater(dependencyVersionsPath, "MicrosoftNETCoreAppPackageVersion", "Microsoft.NETCore.App");
yield return CreateRegexUpdater(dependencyVersionsPath, "MicrosoftDotNetPlatformAbstractionsPackageVersion", "Microsoft.DotNet.PlatformAbstractions");
yield return CreateRegexUpdater(dependencyVersionsPath, "MicrosoftExtensionsDependencyModelPackageVersion", "Microsoft.Extensions.DependencyModel");
if (s_config.HasRoslynVersionFragment)
{
yield return CreateRegexUpdater(dependencyVersionsPath, "MicrosoftCodeAnalysisCSharpPackageVersion", "Microsoft.CodeAnalysis.CSharp");
}
}
private static IDependencyUpdater CreateRegexUpdater(string repoRelativePath, string propertyName, string packageId)

View file

@ -24,14 +24,15 @@
<Text X="155" Y="80" Width="-11" Height="-70" TabStop="no" FontId="2" HexStyle="0x800000" DisablePrefix="yes" />
<Text Name="WelcomeHeaderMessage" X="160" Y="81" Width="300" Height="30" TabStop="yes" FontId="2">#(loc.WelcomeHeaderMessage)</Text>
<Text Name="WelcomeDescription" X="160" Y="125" Width="460" Height="65" TabStop="yes" FontId="3">#(loc.WelcomeDescription)</Text>
<Text Name="LearnMoreTitle" X="160" Y="179" Width="460" Height="30" TabStop="yes" FontId="2">#(loc.LearnMoreTitle)</Text>
<Hypertext Name="CoreDocumentationLink" X="185" Y="223" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.CoreDocumentationLink)</Hypertext>
<Hypertext Name="SDKDocumentation" X="185" Y="243" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SDKDocumentation)</Hypertext>
<Hypertext Name="PrivacyStatementLink" X="185" Y="263" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.PrivacyStatementLink)</Hypertext>
<Hypertext Name="MITLicenseLink" X="185" Y="283" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.MITLicenseLink)</Hypertext>
<Text Name="InstallationNoteTitle" X="160" Y="308" Width="460" Height="30" TabStop="yes" FontId="2">#(loc.InstallationNoteTitle)</Text>
<Text Name="InstallationNote" X="160" Y="352" Width="460" Height="30" TabStop="yes" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.InstallationNote)</Text>
<Text Name="WelcomeDescription" X="160" Y="115" Width="460" Height="65" TabStop="yes" FontId="3">#(loc.WelcomeDescription)</Text>
<Text Name="LearnMoreTitle" X="160" Y="164" Width="460" Height="30" TabStop="yes" FontId="2">#(loc.LearnMoreTitle)</Text>
<Hypertext Name="CoreDocumentationLink" X="185" Y="198" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.CoreDocumentationLink)</Hypertext>
<Hypertext Name="SDKDocumentation" X="185" Y="218" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SDKDocumentation)</Hypertext>
<Hypertext Name="PrivacyStatementLink" X="185" Y="238" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.PrivacyStatementLink)</Hypertext>
<Hypertext Name="MITLicenseLink" X="185" Y="258" Width="400" Height="22" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.MITLicenseLink)</Hypertext>
<Text Name="InstallationNoteTitle" X="160" Y="278" Width="460" Height="30" TabStop="yes" FontId="2">#(loc.InstallationNoteTitle)</Text>
<Text Name="InstallationNote" X="160" Y="312" Width="460" Height="30" TabStop="yes" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.InstallationNote)</Text>
<Hypertext Name="VisualStudioWarning" X="160" Y="350" Width="460" Height="30" TabStop="yes" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.VisualStudioWarning)</Hypertext>
<Button Name="InstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallInstallButton)</Button>
<Button Name="WelcomeCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallCloseButton)</Button>
</Page>

View file

@ -74,4 +74,6 @@ Resources
<String Id="InstallationNoteTitle">Installation note</String>
<String Id="InstallationNote">A command will be run during the install process that will improve project restore speed and enable offline access. It will take up to a minute to complete.
</String>
<String Id="VisualStudioWarning">If you plan to use .NET Core 2.1 with Visual Studio, Visual Studio 2017 15.7 or newer is recommended. &lt;A HREF=&quot;https://go.microsoft.com/fwlink/?linkid=866799&quot;&gt;Learn More&lt;/A&gt;.
</String>
</WixLocalization>

View file

@ -29,12 +29,15 @@ if($Help)
# The first 'pass' call to "dotnet msbuild build.proj" has a hard-coded "WriteDynamicPropsToStaticPropsFiles" target
# therefore, this call should not have other targets defined. Remove all targets passed in as 'extra parameters'.
$ExtraParametersNoTargets = ""
foreach ($param in $ExtraParameters.split())
if ($ExtraParameters)
{
if((-not $param.StartsWith("/t")) -and (-not $param.StartsWith("/T")))
$ExtraParametersNoTargets = $ExtraParameters.GetRange(0,$ExtraParameters.Count)
foreach ($param in $ExtraParameters)
{
$ExtraParametersNoTargets += "{0} " -f $param
if(($param.StartsWith("/t:", [StringComparison]::OrdinalIgnoreCase)) -or ($param.StartsWith("/target:", [StringComparison]::OrdinalIgnoreCase)))
{
$ExtraParametersNoTargets.Remove("$param") | Out-Null
}
}
}

View file

@ -130,8 +130,9 @@ done
argsnotargets=( )
for arg in ${args[@]}
do
if [[ $arg != '/t'* ]] && [[ $arg != '/T'* ]]; then
argsnotargets+=($arg)
arglower="$(echo $arg | awk '{print tolower($0)}')"
if [[ $arglower != '/t:'* ]] && [[ $arglower != '/target:'* ]]; then
argsnotargets+=($arg)
fi
done

View file

@ -12,20 +12,23 @@ namespace Microsoft.DotNet.Configurer
{
public class CliFolderPathCalculator
{
private const string ToolsFolderName = "tools";
// ToolsShimFolderName ToolPackageFolderName cannot be the same
// or if the PackageId is the same as CommandName, they will conflict on unix.
private const string ToolsShimFolderName = "tools";
private const string ToolPackageFolderName = "toolspkgs";
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 BashPathUnderHomeDirectory ExecutablePackagesPathInUnix
public string ToolsShimPath => Path.Combine(DotnetUserProfileFolderPath, ToolsShimFolderName);
public string ToolsPackagePath => Path.Combine(DotnetUserProfileFolderPath, ToolPackageFolderName);
public BashPathUnderHomeDirectory ToolsShimPathInUnix
{
get
{
return new BashPathUnderHomeDirectory(Environment.GetEnvironmentVariable("HOME"),
Path.Combine(DotnetProfileDirectoryName, ToolsFolderName));
Path.Combine(DotnetProfileDirectoryName, ToolsShimFolderName));
}
}

View file

@ -150,6 +150,8 @@ Here are some options to fix this error:
<data name="AspNetCertificateInstalled" xml:space="preserve">
<value>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</value>
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</value>
</data>
</root>

View file

@ -61,8 +61,10 @@ Tuto chybu můžete opravit pomocí některé z těchto možností:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Nainstaloval se vývojový certifikát ASP.NET Core HTTPS. Další informace najdete na https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Im Folgenden finden Sie einige Optionen, um diesen Fehler zu beheben:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Installiertes ASP.NET Core-HTTPS-Entwicklungszertifikat. Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -60,8 +60,10 @@ Estas son algunas opciones para corregir este error:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Se instaló el certificado de desarrollo HTTPS de ASP.NET Core. Para más información, vaya a https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Voici quelques options pour corriger cette erreur :
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Certificat de développement HTTPS ASP.NET Core installé. Pour plus dinformations, accédez à https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Ecco alcune opzioni per correggere questo errore:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Il certificato di sviluppo HTTPS di ASP.NET Core è stato installato. Per altre informazioni, vedere https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Here are some options to fix this error:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
ASP.NET Core HTTPS 開発証明書をインストールしました。詳しくは、https://go.microsoft.com/fwlink/?linkid=84805 をご覧ください</target>
<note />

View file

@ -61,8 +61,10 @@ Here are some options to fix this error:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
설치된 ASP.NET Core HTTPS 개발 인증서. 자세한 내용은 https://go.microsoft.com/fwlink/?linkid=84805을(를) 참조하세요.</target>
<note />

View file

@ -61,8 +61,10 @@ Oto kilka opcji naprawiania tego błędu:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Zainstalowany certyfikat programistyczny HTTPS ASP.NET Core. Aby uzyskać więcej informacji, przejdź na adres https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Aqui estão algumas opções para corrigir este erro:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Certificado de desenvolvimento de HTTPS do ASP.NET Core instalado. Para obter mais informações, vá para https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Here are some options to fix this error:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
Установлен сертификат для HTTPS-разработки на ASP.NET Core. Дополнительные сведения: https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Bu hatayı düzeltmek için bazı seçenekler:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
ASP.NET Core HTTPS geliştirme sertifikası yüklendi. Daha fazla bilgi için bkz. https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Here are some options to fix this error:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
安装 ASP.NET Core HTTPS 开发证书。有关详细信息,请转到 https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -61,8 +61,10 @@ Here are some options to fix this error:
<trans-unit id="AspNetCertificateInstalled">
<source>ASP.NET Core
------------
Installed ASP.NET Core HTTPS development certificate. For more information go to https://go.microsoft.com/fwlink/?linkid=84805</source>
<target state="translated">ASP.NET Core
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate (Windows and macOS only) first install the dev-certs tool by running 'dotnet install tool dotnet-dev-certs -g --version 2.1.0-preview1-final' and then run 'dotnet-dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.</source>
<target state="needs-review-translation">ASP.NET Core
------------
已安裝 ASP.NET Core HTTPS 開發憑證。如需詳細資訊,請前往 https://go.microsoft.com/fwlink/?linkid=84805</target>
<note />

View file

@ -47,5 +47,10 @@ namespace Microsoft.Extensions.EnvironmentAbstractions
{
Directory.CreateDirectory(path);
}
public void Delete(string path, bool recursive)
{
Directory.Delete(path, recursive);
}
}
}

View file

@ -45,5 +45,10 @@ namespace Microsoft.Extensions.EnvironmentAbstractions
{
File.WriteAllText(path, content);
}
public void Delete(string path)
{
File.Delete(path);
}
}
}

View file

@ -16,5 +16,7 @@ namespace Microsoft.Extensions.EnvironmentAbstractions
string GetDirectoryFullName(string path);
void CreateDirectory(string path);
void Delete(string path, bool recursive);
}
}

View file

@ -24,5 +24,7 @@ namespace Microsoft.Extensions.EnvironmentAbstractions
void CreateEmptyFile(string path);
void WriteAllText(string path, string content);
void Delete(string path);
}
}

View file

@ -520,28 +520,26 @@
<data name="NoRestoreDescription" xml:space="preserve">
<value>Does not do an implicit restore when executing the command.</value>
</data>
<data name="CannotBeNullOrWhitespace" xml:space="preserve">
<value>Cannot be null or whitespace.</value>
</data>
<data name="ContainInvalidCharacters" xml:space="preserve">
<value>Contains one or more invalid characters: {0}</value>
</data>
<data name="NuGetConfigurationFileDoesNotExist" xml:space="preserve">
<value>NuGet configuration file {0} does not exist.</value>
</data>
<data name="ToolSettingInvalidRunner" xml:space="preserve">
<value>The tool's settings file has non "dotnet" as runner.</value>
</data>
<data name="ToolSettingMoreThanOneCommand" xml:space="preserve">
<value>The tool's settings file has more than one command defined.</value>
</data>
<data name="ToolSettingsContainError" xml:space="preserve">
<value>The tool's settings file contains error.
{0}</value>
</data>
<data name="ToolSettingsInvalidXml" xml:space="preserve">
<value>The tool's settings file is invalid xml.
{0}</value>
<value>Invalid XML: {0}</value>
</data>
<data name="ToolSettingsMissingCommandName" xml:space="preserve">
<value>Tool defines a command with a missing name setting.</value>
</data>
<data name="ToolSettingsMissingEntryPoint" xml:space="preserve">
<value>Command '{0}' is missing an entry point setting.</value>
</data>
<data name="ToolSettingsInvalidCommandName" xml:space="preserve">
<value>Command '{0}' contains one or more of the following invalid characters: {1}.</value>
</data>
<data name="ToolSettingsMoreThanOneCommand" xml:space="preserve">
<value>More than one command is defined for the tool.</value>
</data>
<data name="ToolSettingsUnsupportedRunner" xml:space="preserve">
<value>Command '{0}' uses unsupported runner '{1}'."</value>
</data>
<data name="EnvironmentPathLinuxManualInstruction" xml:space="preserve">
<value>Cannot find the tools executable path. Please ensure {0} is added to your PATH.
@ -590,4 +588,7 @@ Output: {1}</value>
<data name="ToolPackageMissingSettingsFile" xml:space="preserve">
<value>Package '{0}' is missing tool settings file DotnetToolSettings.xml.</value>
</data>
</root>
<data name="ToolPackageConflictPackageId" xml:space="preserve">
<value>Tool '{0}' is already installed.</value>
</data>
</root>

View file

@ -0,0 +1,52 @@
// 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 System.Transactions;
using Microsoft.Extensions.EnvironmentAbstractions;
namespace Microsoft.DotNet.ShellShim
{
internal class CreateShimTransaction : IEnlistmentNotification
{
private readonly Action<List<FilePath>> _createShim;
private readonly Action<List<FilePath>> _rollback;
private List<FilePath> _locationOfShimDuringTransaction = new List<FilePath>();
public CreateShimTransaction(
Action<List<FilePath>> createShim,
Action<List<FilePath>> rollback)
{
_createShim = createShim ?? throw new ArgumentNullException(nameof(createShim));
_rollback = rollback ?? throw new ArgumentNullException(nameof(rollback));
}
public void CreateShim()
{
_createShim(_locationOfShimDuringTransaction);
}
public void Commit(Enlistment enlistment)
{
enlistment.Done();
}
public void InDoubt(Enlistment enlistment)
{
Rollback(enlistment);
}
public void Prepare(PreparingEnlistment preparingEnlistment)
{
preparingEnlistment.Done();
}
public void Rollback(Enlistment enlistment)
{
_rollback(_locationOfShimDuringTransaction);
enlistment.Done();
}
}
}

View file

@ -32,20 +32,20 @@ namespace Microsoft.DotNet.ShellShim
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
environmentPath = new WindowsEnvironmentPath(
cliFolderPathCalculator.ExecutablePackagesPath,
cliFolderPathCalculator.ToolsShimPath,
Reporter.Output);
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && hasSuperUserAccess)
{
environmentPath = new LinuxEnvironmentPath(
cliFolderPathCalculator.ExecutablePackagesPathInUnix,
cliFolderPathCalculator.ToolsShimPathInUnix,
Reporter.Output,
environmentProvider, new FileWrapper());
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && hasSuperUserAccess)
{
environmentPath = new OSXEnvironmentPath(
executablePath: cliFolderPathCalculator.ExecutablePackagesPathInUnix,
executablePath: cliFolderPathCalculator.ToolsShimPathInUnix,
reporter: Reporter.Output,
environmentProvider: environmentProvider,
fileSystem: new FileWrapper());

View file

@ -1,8 +1,10 @@
namespace Microsoft.DotNet.ShellShim
using Microsoft.Extensions.EnvironmentAbstractions;
namespace Microsoft.DotNet.ShellShim
{
public interface IShellShimMaker
{
void CreateShim(string packageExecutablePath, string shellCommandName);
void CreateShim(FilePath packageExecutable, string shellCommandName);
void EnsureCommandNameUniqueness(string shellCommandName);
}
}

View file

@ -2,10 +2,12 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Transactions;
using System.Xml.Linq;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools;
@ -22,32 +24,71 @@ namespace Microsoft.DotNet.ShellShim
public ShellShimMaker(string pathToPlaceShim)
{
_pathToPlaceShim =
pathToPlaceShim ?? throw new ArgumentNullException(nameof(pathToPlaceShim));
_pathToPlaceShim = pathToPlaceShim ?? throw new ArgumentNullException(nameof(pathToPlaceShim));
}
public void CreateShim(string packageExecutablePath, string shellCommandName)
public void CreateShim(FilePath packageExecutable, string shellCommandName)
{
var createShimTransaction = new CreateShimTransaction(
createShim: locationOfShimDuringTransaction =>
{
EnsureCommandNameUniqueness(shellCommandName);
PlaceShim(packageExecutable, shellCommandName, locationOfShimDuringTransaction);
},
rollback: locationOfShimDuringTransaction =>
{
foreach (FilePath f in locationOfShimDuringTransaction)
{
if (File.Exists(f.Value))
{
File.Delete(f.Value);
}
}
});
using (var transactionScope = new TransactionScope())
{
Transaction.Current.EnlistVolatile(createShimTransaction, EnlistmentOptions.None);
createShimTransaction.CreateShim();
transactionScope.Complete();
}
}
private void PlaceShim(FilePath packageExecutable, string shellCommandName, List<FilePath> locationOfShimDuringTransaction)
{
FilePath shimPath = GetShimPath(shellCommandName);
if (!Directory.Exists(shimPath.GetDirectoryPath().Value))
{
Directory.CreateDirectory(shimPath.GetDirectoryPath().Value);
}
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
CreateConfigFile(shimPath.Value + ".config", entryPoint: packageExecutablePath, runner: "dotnet");
FilePath windowsConfig = GetWindowsConfigPath(shellCommandName);
CreateConfigFile(
windowsConfig,
entryPoint: packageExecutable,
runner: "dotnet");
locationOfShimDuringTransaction.Add(windowsConfig);
using (var shim = File.Create(shimPath.Value))
using (var exe = typeof(ShellShimMaker).Assembly.GetManifestResourceStream(LauncherExeResourceName))
{
exe.CopyTo(shim);
}
locationOfShimDuringTransaction.Add(shimPath);
}
else
{
var packageExecutable = new FilePath(packageExecutablePath);
var script = new StringBuilder();
script.AppendLine("#!/bin/sh");
script.AppendLine($"dotnet {packageExecutable.ToQuotedString()} \"$@\"");
File.WriteAllText(shimPath.Value, script.ToString());
locationOfShimDuringTransaction.Add(shimPath);
SetUserExecutionPermissionToShimFile(shimPath);
}
@ -55,7 +96,7 @@ namespace Microsoft.DotNet.ShellShim
public void EnsureCommandNameUniqueness(string shellCommandName)
{
if (File.Exists(Path.Combine(_pathToPlaceShim, shellCommandName)))
if (File.Exists(GetShimPath(shellCommandName).Value))
{
throw new GracefulException(
string.Format(CommonLocalizableStrings.FailInstallToolSameName,
@ -63,22 +104,27 @@ namespace Microsoft.DotNet.ShellShim
}
}
internal void CreateConfigFile(string outputPath, string entryPoint, string runner)
internal void CreateConfigFile(FilePath outputPath, FilePath entryPoint, string runner)
{
XDocument config;
using (var resource = typeof(ShellShimMaker).Assembly.GetManifestResourceStream(LauncherConfigResourceName))
using(var resource = typeof(ShellShimMaker).Assembly.GetManifestResourceStream(LauncherConfigResourceName))
{
config = XDocument.Load(resource);
}
var appSettings = config.Descendants("appSettings").First();
appSettings.Add(new XElement("add", new XAttribute("key", "entryPoint"), new XAttribute("value", entryPoint)));
appSettings.Add(new XElement("add", new XAttribute("key", "entryPoint"), new XAttribute("value", entryPoint.Value)));
appSettings.Add(new XElement("add", new XAttribute("key", "runner"), new XAttribute("value", runner ?? string.Empty)));
config.Save(outputPath);
config.Save(outputPath.Value);
}
public void Remove(string shellCommandName)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
File.Delete(GetWindowsConfigPath(shellCommandName).Value);
}
File.Delete(GetShimPath(shellCommandName).Value);
}
@ -93,6 +139,11 @@ namespace Microsoft.DotNet.ShellShim
return new FilePath(scriptPath);
}
private FilePath GetWindowsConfigPath(string shellCommandName)
{
return new FilePath(GetShimPath(shellCommandName).Value + ".config");
}
private static void SetUserExecutionPermissionToShimFile(FilePath scriptPath)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))

View file

@ -1,6 +1,7 @@
// 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.Collections.Generic;
using Microsoft.Extensions.EnvironmentAbstractions;
namespace Microsoft.DotNet.ToolPackage
@ -11,6 +12,7 @@ namespace Microsoft.DotNet.ToolPackage
FilePath projectPath,
DirectoryPath assetJsonOutput,
FilePath? nugetconfig,
string source);
string source,
string verbosity);
}
}

View file

@ -1,6 +1,7 @@
// 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.Collections.Generic;
using Microsoft.Extensions.EnvironmentAbstractions;
namespace Microsoft.DotNet.ToolPackage
@ -12,6 +13,7 @@ namespace Microsoft.DotNet.ToolPackage
string packageVersion = null,
FilePath? nugetconfig = null,
string targetframework = null,
string source = null);
string source = null,
string verbosity = null);
}
}

View file

@ -3,6 +3,7 @@
using System;
using System.IO;
using System.Linq;
using Microsoft.DotNet.Tools;
namespace Microsoft.DotNet.ToolPackage
@ -15,33 +16,36 @@ namespace Microsoft.DotNet.ToolPackage
{
if (string.IsNullOrWhiteSpace(commandName))
{
throw new ArgumentNullException(nameof(commandName), CommonLocalizableStrings.CannotBeNullOrWhitespace);
throw new ToolConfigurationException(CommonLocalizableStrings.ToolSettingsMissingCommandName);
}
EnsureNoInvalidFilenameCharacters(commandName, nameof(toolAssemblyEntryPoint));
if (string.IsNullOrWhiteSpace(toolAssemblyEntryPoint))
{
throw new ArgumentNullException(nameof(toolAssemblyEntryPoint), CommonLocalizableStrings.CannotBeNullOrWhitespace);
throw new ToolConfigurationException(
string.Format(
CommonLocalizableStrings.ToolSettingsMissingEntryPoint,
commandName));
}
EnsureNoInvalidFilenameCharacters(commandName);
CommandName = commandName;
ToolAssemblyEntryPoint = toolAssemblyEntryPoint;
}
private void EnsureNoInvalidFilenameCharacters(string commandName, string nameOfParam)
private void EnsureNoInvalidFilenameCharacters(string commandName)
{
char[] invalidCharactors = Path.GetInvalidFileNameChars();
if (commandName.IndexOfAny(invalidCharactors) != -1)
var invalidCharacters = Path.GetInvalidFileNameChars();
if (commandName.IndexOfAny(invalidCharacters) != -1)
{
throw new ArgumentException(
paramName: nameof(nameOfParam),
message: string.Format(CommonLocalizableStrings.ContainInvalidCharacters,
new string(invalidCharactors)));
throw new ToolConfigurationException(
string.Format(
CommonLocalizableStrings.ToolSettingsInvalidCommandName,
commandName,
string.Join(", ", invalidCharacters.Select(c => $"'{c}'"))));
}
}
public string CommandName { get; }
public string ToolAssemblyEntryPoint { get; }
}

View file

@ -29,35 +29,29 @@ namespace Microsoft.DotNet.ToolPackage
catch (InvalidOperationException e) when (e.InnerException is XmlException)
{
throw new ToolConfigurationException(
string.Format(CommonLocalizableStrings.ToolSettingsInvalidXml, e.InnerException.Message));
string.Format(
CommonLocalizableStrings.ToolSettingsInvalidXml,
e.InnerException.Message));
}
}
if (dotNetCliTool.Commands.Length != 1)
{
throw new ToolConfigurationException(
CommonLocalizableStrings.ToolSettingMoreThanOneCommand);
throw new ToolConfigurationException(CommonLocalizableStrings.ToolSettingsMoreThanOneCommand);
}
if (dotNetCliTool.Commands[0].Runner != "dotnet")
{
throw new ToolConfigurationException(
CommonLocalizableStrings.ToolSettingInvalidRunner);
string.Format(
CommonLocalizableStrings.ToolSettingsUnsupportedRunner,
dotNetCliTool.Commands[0].Name,
dotNetCliTool.Commands[0].Runner));
}
var commandName = dotNetCliTool.Commands[0].Name;
var toolAssemblyEntryPoint = dotNetCliTool.Commands[0].EntryPoint;
try
{
return new ToolConfiguration(commandName, toolAssemblyEntryPoint);
}
catch (ArgumentException e)
{
throw new ToolConfigurationException(
string.Format(CommonLocalizableStrings.ToolSettingsContainError,
e.Message));
}
return new ToolConfiguration(
dotNetCliTool.Commands[0].Name,
dotNetCliTool.Commands[0].EntryPoint);
}
}
}

View file

@ -0,0 +1,52 @@
// 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 System.Transactions;
using Microsoft.Extensions.EnvironmentAbstractions;
namespace Microsoft.DotNet.ToolPackage
{
internal class ToolPackageObtainTransaction : IEnlistmentNotification
{
private readonly Func<List<DirectoryPath>, ToolConfigurationAndExecutablePath> _obtainAndReturnExecutablePath;
private readonly Action<List<DirectoryPath>> _rollback;
private List<DirectoryPath> _locationOfPackageDuringTransaction = new List<DirectoryPath>();
public ToolPackageObtainTransaction(
Func<List<DirectoryPath>, ToolConfigurationAndExecutablePath> obtainAndReturnExecutablePath,
Action<List<DirectoryPath>> rollback)
{
_obtainAndReturnExecutablePath = obtainAndReturnExecutablePath ?? throw new ArgumentNullException(nameof(obtainAndReturnExecutablePath));
_rollback = rollback ?? throw new ArgumentNullException(nameof(rollback));
}
public ToolConfigurationAndExecutablePath ObtainAndReturnExecutablePath()
{
return _obtainAndReturnExecutablePath(_locationOfPackageDuringTransaction);
}
public void Commit(Enlistment enlistment)
{
enlistment.Done();
}
public void InDoubt(Enlistment enlistment)
{
Rollback(enlistment);
}
public void Prepare(PreparingEnlistment preparingEnlistment)
{
preparingEnlistment.Done();
}
public void Rollback(Enlistment enlistment)
{
_rollback(_locationOfPackageDuringTransaction);
enlistment.Done();
}
}
}

View file

@ -1,10 +1,11 @@
using System;
using System.IO;
using System.Linq;
using System.Transactions;
using System.Xml.Linq;
using Microsoft.DotNet.Tools;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Configurer;
using Microsoft.DotNet.Tools;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.ProjectModel;
@ -38,7 +39,71 @@ namespace Microsoft.DotNet.ToolPackage
string packageVersion = null,
FilePath? nugetconfig = null,
string targetframework = null,
string source = null)
string source = null,
string verbosity = null)
{
var stageDirectory = _toolsPath.WithSubDirectories(".stage", Path.GetRandomFileName());
var toolPackageObtainTransaction = new ToolPackageObtainTransaction(
obtainAndReturnExecutablePath: (locationOfPackageDuringTransaction) =>
{
if (Directory.Exists(_toolsPath.WithSubDirectories(packageId).Value))
{
throw new PackageObtainException(
string.Format(CommonLocalizableStrings.ToolPackageConflictPackageId, packageId));
}
locationOfPackageDuringTransaction.Add(stageDirectory);
var toolConfigurationAndExecutablePath = ObtainAndReturnExecutablePathInStageFolder(
packageId,
stageDirectory,
packageVersion,
nugetconfig,
targetframework,
source,
verbosity);
DirectoryPath destinationDirectory = _toolsPath.WithSubDirectories(packageId);
Directory.Move(
stageDirectory.Value,
destinationDirectory.Value);
locationOfPackageDuringTransaction.Clear();
locationOfPackageDuringTransaction.Add(destinationDirectory);
return toolConfigurationAndExecutablePath;
},
rollback: (locationOfPackageDuringTransaction) =>
{
foreach (DirectoryPath l in locationOfPackageDuringTransaction)
{
if (Directory.Exists(l.Value))
{
Directory.Delete(l.Value, recursive: true);
}
}
}
);
using (var transactionScope = new TransactionScope())
{
Transaction.Current.EnlistVolatile(toolPackageObtainTransaction, EnlistmentOptions.None);
var toolConfigurationAndExecutablePath = toolPackageObtainTransaction.ObtainAndReturnExecutablePath();
transactionScope.Complete();
return toolConfigurationAndExecutablePath;
}
}
private ToolConfigurationAndExecutablePath ObtainAndReturnExecutablePathInStageFolder(
string packageId,
DirectoryPath stageDirectory,
string packageVersion = null,
FilePath? nugetconfig = null,
string targetframework = null,
string source = null,
string verbosity = null)
{
if (packageId == null)
{
@ -62,34 +127,34 @@ namespace Microsoft.DotNet.ToolPackage
var packageVersionOrPlaceHolder = new PackageVersion(packageVersion);
DirectoryPath toolDirectory =
CreateIndividualToolVersionDirectory(packageId, packageVersionOrPlaceHolder);
DirectoryPath nugetSandboxDirectory =
CreateNugetSandboxDirectory(packageVersionOrPlaceHolder, stageDirectory);
FilePath tempProjectPath = CreateTempProject(
packageId,
packageVersionOrPlaceHolder,
targetframework,
toolDirectory);
nugetSandboxDirectory);
_projectRestorer.Restore(tempProjectPath, toolDirectory, nugetconfig, source);
_projectRestorer.Restore(tempProjectPath, nugetSandboxDirectory, nugetconfig, source, verbosity);
if (packageVersionOrPlaceHolder.IsPlaceholder)
{
var concreteVersion =
new DirectoryInfo(
Directory.GetDirectories(
toolDirectory.WithSubDirectories(packageId).Value).Single()).Name;
nugetSandboxDirectory.WithSubDirectories(packageId).Value).Single()).Name;
DirectoryPath versioned =
toolDirectory.GetParentPath().WithSubDirectories(concreteVersion);
nugetSandboxDirectory.GetParentPath().WithSubDirectories(concreteVersion);
MoveToVersionedDirectory(versioned, toolDirectory);
MoveToVersionedDirectory(versioned, nugetSandboxDirectory);
toolDirectory = versioned;
nugetSandboxDirectory = versioned;
packageVersion = concreteVersion;
}
LockFile lockFile = new LockFileFormat()
.ReadWithLock(toolDirectory.WithFile("project.assets.json").Value)
.ReadWithLock(nugetSandboxDirectory.WithFile("project.assets.json").Value)
.Result;
LockFileItem dotnetToolSettings = FindAssetInLockFile(lockFile, "DotnetToolSettings.xml", packageId);
@ -101,7 +166,7 @@ namespace Microsoft.DotNet.ToolPackage
}
FilePath toolConfigurationPath =
toolDirectory
nugetSandboxDirectory
.WithSubDirectories(packageId, packageVersion)
.WithFile(dotnetToolSettings.Path);
@ -119,7 +184,9 @@ namespace Microsoft.DotNet.ToolPackage
return new ToolConfigurationAndExecutablePath(
toolConfiguration,
toolDirectory.WithSubDirectories(
_toolsPath.WithSubDirectories(
packageId,
packageVersion,
packageId,
packageVersion)
.WithFile(entryPointFromLockFile.Path));
@ -176,12 +243,13 @@ namespace Microsoft.DotNet.ToolPackage
new XElement("RestoreAdditionalProjectFallbackFolders", string.Empty), // block other
new XElement("RestoreAdditionalProjectFallbackFoldersExcludes", string.Empty), // block other
new XElement("DisableImplicitNuGetFallbackFolder", "true")), // disable SDK side implicit NuGetFallbackFolder
new XElement("ItemGroup",
new XElement("ItemGroup",
new XElement("PackageReference",
new XAttribute("Include", packageId),
new XAttribute("Version", packageVersion.IsConcreteValue ? packageVersion.Value : "*") // nuget will restore * for latest
))
));
))
));
File.WriteAllText(tempProjectPath.Value,
tempProjectContent.ToString());
@ -189,12 +257,12 @@ namespace Microsoft.DotNet.ToolPackage
return tempProjectPath;
}
private DirectoryPath CreateIndividualToolVersionDirectory(
string packageId,
PackageVersion packageVersion)
private DirectoryPath CreateNugetSandboxDirectory(
PackageVersion packageVersion,
DirectoryPath stageDirectory
)
{
DirectoryPath individualTool = _toolsPath.WithSubDirectories(packageId);
DirectoryPath individualToolVersion = individualTool.WithSubDirectories(packageVersion.Value);
DirectoryPath individualToolVersion = stageDirectory.WithSubDirectories(packageVersion.Value);
EnsureDirectoryExists(individualToolVersion);
return individualToolVersion;
}

View file

@ -2,8 +2,10 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Transactions;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
@ -20,6 +22,7 @@ namespace Microsoft.DotNet.Tools.Install.Tool
private readonly IEnvironmentPathInstruction _environmentPathInstruction;
private readonly IShellShimMaker _shellShimMaker;
private readonly IReporter _reporter;
private readonly IReporter _errorReporter;
private readonly string _packageId;
private readonly string _packageVersion;
@ -27,6 +30,7 @@ namespace Microsoft.DotNet.Tools.Install.Tool
private readonly string _framework;
private readonly string _source;
private readonly bool _global;
private readonly string _verbosity;
public InstallToolCommand(
AppliedOption appliedCommand,
@ -48,26 +52,27 @@ namespace Microsoft.DotNet.Tools.Install.Tool
_framework = appliedCommand.ValueOrDefault<string>("framework");
_source = appliedCommand.ValueOrDefault<string>("source");
_global = appliedCommand.ValueOrDefault<bool>("global");
_verbosity = appliedCommand.SingleArgumentOrDefault("verbosity");
var cliFolderPathCalculator = new CliFolderPathCalculator();
var executablePackagePath = new DirectoryPath(cliFolderPathCalculator.ExecutablePackagesPath);
var offlineFeedPath = new DirectoryPath(cliFolderPathCalculator.CliFallbackFolderPath);
_toolPackageObtainer = toolPackageObtainer ?? new ToolPackageObtainer(
executablePackagePath,
new DirectoryPath(cliFolderPathCalculator.ToolsPackagePath),
offlineFeedPath,
() => new DirectoryPath(Path.GetTempPath())
.WithSubDirectories(Path.GetRandomFileName())
.WithFile(Path.GetRandomFileName() + ".csproj"),
new Lazy<string>(BundledTargetFramework.GetTargetFrameworkMoniker),
new ProjectRestorer());
new ProjectRestorer(reporter));
_environmentPathInstruction = environmentPathInstruction
?? EnvironmentPathFactory
.CreateEnvironmentPathInstruction();
_shellShimMaker = shellShimMaker ?? new ShellShimMaker(executablePackagePath.Value);
_shellShimMaker = shellShimMaker ?? new ShellShimMaker(cliFolderPathCalculator.ToolsShimPath);
_reporter = reporter ?? Reporter.Output;
_reporter = (reporter ?? Reporter.Output);
_errorReporter = (reporter ?? Reporter.Error);
}
public override int Execute()
@ -77,26 +82,6 @@ namespace Microsoft.DotNet.Tools.Install.Tool
throw new GracefulException(LocalizableStrings.InstallToolCommandOnlySupportGlobal);
}
var toolConfigurationAndExecutablePath = ObtainPackage();
var commandName = toolConfigurationAndExecutablePath.Configuration.CommandName;
_shellShimMaker.EnsureCommandNameUniqueness(commandName);
_shellShimMaker.CreateShim(
toolConfigurationAndExecutablePath.Executable.Value,
commandName);
_environmentPathInstruction
.PrintAddPathInstructionIfPathDoesNotExist();
_reporter.WriteLine(
string.Format(LocalizableStrings.InstallationSucceeded, commandName));
return 0;
}
private ToolConfigurationAndExecutablePath ObtainPackage()
{
try
{
FilePath? configFile = null;
@ -105,31 +90,47 @@ namespace Microsoft.DotNet.Tools.Install.Tool
configFile = new FilePath(_configFilePath);
}
return _toolPackageObtainer.ObtainAndReturnExecutablePath(
packageId: _packageId,
packageVersion: _packageVersion,
nugetconfig: configFile,
targetframework: _framework,
source: _source);
}
using (var transactionScope = new TransactionScope())
{
var toolConfigurationAndExecutablePath = _toolPackageObtainer.ObtainAndReturnExecutablePath(
packageId: _packageId,
packageVersion: _packageVersion,
nugetconfig: configFile,
targetframework: _framework,
source: _source,
verbosity: _verbosity);
var commandName = toolConfigurationAndExecutablePath.Configuration.CommandName;
_shellShimMaker.CreateShim(
toolConfigurationAndExecutablePath.Executable,
commandName);
_environmentPathInstruction
.PrintAddPathInstructionIfPathDoesNotExist();
_reporter.WriteLine(
string.Format(LocalizableStrings.InstallationSucceeded, commandName));
transactionScope.Complete();
}
}
catch (PackageObtainException ex)
{
throw new GracefulException(
message:
string.Format(LocalizableStrings.InstallFailedNuget,
ex.Message),
innerException: ex);
_errorReporter.WriteLine(ex.Message.Red());
_errorReporter.WriteLine(string.Format(LocalizableStrings.ToolInstallationFailed, _packageId).Red());
return 1;
}
catch (ToolConfigurationException ex)
{
throw new GracefulException(
message:
_errorReporter.WriteLine(
string.Format(
LocalizableStrings.InstallFailedPackage,
ex.Message),
innerException: ex);
LocalizableStrings.InvalidToolConfiguration,
ex.Message).Red());
_errorReporter.WriteLine(string.Format(LocalizableStrings.ToolInstallationFailedContactAuthor, _packageId).Red());
return 1;
}
return 0;
}
}
}

View file

@ -36,7 +36,8 @@ namespace Microsoft.DotNet.Cli
"-f|--framework",
LocalizableStrings.FrameworkOptionDescription,
Accept.ExactlyOneArgument()),
CommonOptions.HelpOption());
CommonOptions.HelpOption(),
CommonOptions.VerbosityOption());
}
}
}

View file

@ -149,24 +149,6 @@
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</value>
</data>
<data name="FailedToRestorePackage" xml:space="preserve">
<value>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</value>
</data>
<data name="InstallFailedNuget" xml:space="preserve">
<value>Install failed. Failed to download package:
NuGet returned:
{0}</value>
</data>
<data name="InstallFailedPackage" xml:space="preserve">
<value>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</value>
</data>
<data name="InstallationSucceeded" xml:space="preserve">
<value>
@ -181,4 +163,16 @@ The installation succeeded. If there are no further instructions, you can type t
<data name="InstallToolCommandOnlySupportGlobal" xml:space="preserve">
<value>The --global switch (-g) is currently required because only user wide tools are supported.</value>
</data>
<data name="InvalidToolConfiguration" xml:space="preserve">
<value>The settings file in the tool's NuGet package is invalid: {0}</value>
</data>
<data name="ToolInstallationFailed" xml:space="preserve">
<value>Tool '{0}' failed to install.</value>
</data>
<data name="ToolInstallationFailedContactAuthor" xml:space="preserve">
<value>Tool '{0}' failed to install. Please contact the tool author for assistance.</value>
</data>
<data name="ToolInstallationRestoreFailed" xml:space="preserve">
<value>The tool package could not be restored.</value>
</data>
</root>

View file

@ -14,11 +14,19 @@ namespace Microsoft.DotNet.Tools.Install.Tool
{
internal class ProjectRestorer : IProjectRestorer
{
private IReporter _reporter;
public ProjectRestorer(IReporter reporter)
{
_reporter = reporter;
}
public void Restore(
FilePath projectPath,
DirectoryPath assetJsonOutput,
FilePath? nugetconfig,
string source = null)
string source = null,
string verbosity = null)
{
var argsToPassToRestore = new List<string>();
@ -42,18 +50,22 @@ namespace Microsoft.DotNet.Tools.Install.Tool
$"/p:BaseIntermediateOutputPath={assetJsonOutput.ToQuotedString()}"
});
argsToPassToRestore.Add($"/verbosity:{verbosity ?? "quiet"}");
var command = new DotNetCommandFactory(alwaysRunOutOfProc: true)
.Create("restore", argsToPassToRestore)
.CaptureStdOut()
.CaptureStdErr();
.Create("restore", argsToPassToRestore);
if (_reporter != null)
{
command = command
.OnOutputLine((line) => _reporter.WriteLine(line))
.OnErrorLine((line) => _reporter.WriteLine(line));
}
var result = command.Execute();
if (result.ExitCode != 0)
{
throw new PackageObtainException(
string.Format(
LocalizableStrings.FailedToRestorePackage,
result.StartInfo.WorkingDirectory, result.StartInfo.Arguments, result.StdErr, result.StdOut));
throw new PackageObtainException(LocalizableStrings.ToolInstallationRestoreFailed);
}
}

View file

@ -30,39 +30,6 @@ Argumenty: {1}
Výstup: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Nepovedlo se obnovit balíček.
WorkingDirectory: {0}
Argumenty: {1}
Výstup: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Instalace byla neúspěšná. Nepovedlo se stáhnout balíček:
Vrácený NuGet:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Instalace byla neúspěšná. Soubor s nastavením v balíčku NuGet nástroje není platný. Kontaktujte prosím vlastníka balíčku NuGet.
Chyba byla následující:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">ID balíčku NuGet nástroje, který se má nainstalovat</target>
@ -113,6 +80,26 @@ Chyba byla následující:
<target state="translated">Přepínač --global (-g) se aktuálně vyžaduje, protože se podporují jenom nástroje pro všechny uživatele.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Argumente: {1}
Ausgabe: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Fehler beim Wiederherstellen des Pakets.
WorkingDirectory: {0}
Argumente: {1}
Ausgabe: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Fehler bei der Installation. Fehler beim Herunterladen des Pakets:
NuGet hat Folgendes zurückgegeben:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Fehler bei der Installation. Die Einstellungsdatei im NuGet-Paket des Tools ist ungültig. Wenden Sie sich an den Besitzer des NuGet-Pakets.
Folgender Fehler wurde gemeldet:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">NuGet-Paket-ID des zu installierenden Tools.</target>
@ -113,6 +80,26 @@ Folgender Fehler wurde gemeldet:
<target state="translated">Die Option --global (-g) ist aktuell erforderlich, weil nur benutzerweite Tools unterstützt werden.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Argumentos: {1}
Salida: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">No se pudo restaurar el paquete.
Directorio de trabajo: {0}
Argumentos: {1}
Salida: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Error en la instalación. No se pudo completar el paquete:
NuGet devuelto:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Error en la instalación. El archivo de configuración del paquete NuGet de la herramienta no es válido. Póngase en contacto con el propietario del paquete NuGet.
El error fue:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">Id. del paquete de NuGet que se instalará.</target>
@ -113,6 +80,26 @@ El error fue:
<target state="translated">El conmutador --global (g) se requiere actualmente porque solo se admiten herramientas para todos los usuarios.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Arguments : {1}
Sortie : {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Échec de la restauration du package.
WorkingDirectory : {0}
Arguments : {1}
Sortie : {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Échec de l'installation. Échec du téléchargement du package :
NuGet a retourné :
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Échec de l'installation. Le fichier de paramètres du package NuGet de l'outil est non valide. Contactez le propriétaire du package NuGet.
Erreur :
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">ID de package NuGet de l'outil à installer.</target>
@ -113,6 +80,26 @@ Erreur :
<target state="translated">Le commutateur --global (-g) est obligatoire, car seuls les outils à l'échelle des utilisateurs sont pris en charge.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Argomenti: {1}
Output: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Non è stato possibile ripristinare il pacchetto.
Directory di lavoro: {0}
Argomenti: {1}
Output: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">L'installazione non è riuscita. Non è stato possibile caricare il pacchetto:
NuGet ha restituito:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">L'installazione non è riuscita. Il file di impostazioni nel pacchetto NuGet dello strumento non è valido. Contattare il proprietario del pacchetto NuGet.
Errore:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">ID pacchetto NuGet dello strumento da installare.</target>
@ -113,6 +80,26 @@ Errore:
<target state="translated">L'opzione --global (-g) è attualmente obbligatoria perché sono supportati solo gli strumenti a livello di utente.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Output: {2}{3}</source>
出力: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">パッケージを復元できませんでした。
作業ディレクトリ: {0}
引数: {1}
出力: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">インストールに失敗しました。パッケージをダウンロードできませんでした:
NuGet によって次のものが返されました:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">インストールできませんでした。ツールの NuGet パッケージの設定ファイルが無効です。NuGet パッケージの所有者に問い合わせてください。
エラーの内容:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">インストールするツールの NuGet パッケージ ID。</target>
@ -113,6 +80,26 @@ The error was:
<target state="translated">サポートされているのはユーザー全体のツールだけなので、現在 --global スイッチ (-g) が必要です。</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Output: {2}{3}</source>
출력: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">패키지를 복원하지 못했습니다.
작업 디렉터리: {0}
인수: {1}
출력: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">설치하지 못했습니다. 패키지를 다운로드하지 못했습니다.
반환된 NuGet:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">설치하지 못했습니다. 도구의 NuGet 패키지에 있는 설정 파일이 잘못되었습니다. NuGet 패키지의 소유자에게 문의하세요.
오류:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">설치할 도구의 NuGet 패키지 ID입니다.</target>
@ -113,6 +80,26 @@ The error was:
<target state="translated">사용자 전체 도구만 지원되므로 -global 스위치(-g)가 필요합니다.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Argumenty: {1}
Dane wyjściowe: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Nie można przywrócić pakietu.
Katalog roboczy: {0}
Argumenty: {1}
Dane wyjściowe: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Instalacja nie powiodła się. Nie można pobrać pakietu:
Zwrócony pakiet NuGet:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Instalacja nie powiodła się. Plik ustawień w pakiecie NuGet narzędzia jest nieprawidłowy. Skontaktuj się z właścicielem pakietu NuGet.
Błąd:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">Identyfikator pakietu NuGet narzędzia do zainstalowania.</target>
@ -113,6 +80,26 @@ Błąd:
<target state="translated">Obecnie jest wymagany przełącznik --global (-g), ponieważ obsługiwane są tylko narzędzia użytkownika.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Arguments: {1}
Output: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Falha ao restaurar pacote.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Falha na instalação. Falha ao baixar o pacote:
o NuGet retornou:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Falha na instalação. O arquivo de configuração no pacote NuGet da ferramenta não é válido. Contate o proprietário do pacote NuGet.
O erro foi o seguinte:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">A ID do pacote NuGet da ferramenta a ser instalada.</target>
@ -113,6 +80,26 @@ O erro foi o seguinte:
<target state="translated">A opção --global (-g) é obrigatória, pois somente ferramentas para todo o usuário são compatíveis.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Output: {2}{3}</source>
Выходные данные: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Не удалось восстановить пакет.
Рабочий каталог: {0}
Аргументы: {1}
Выходные данные: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Выполнить установку не удалось. Не удалось скачать пакет.
Возвращаемые данные NuGet:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Выполнить установку не удалось. Файл параметров в пакете NuGet инструмента недопустим. Обратитесь к владельцу пакета NuGet.
Ошибка:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">Идентификатор пакета NuGet устанавливаемого инструмента.</target>
@ -113,6 +80,26 @@ The error was:
<target state="translated">Параметр "--global switch (-g)" сейчас обязателен, так как поддерживаются только инструменты уровня пользователя.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ Bağımsız değişkenler: {1}
Çıkış: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">Paket geri yüklenemedi.
WorkingDirectory: {0}
Bağımsız değişkenler: {1}
Çıkış: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">Yükleme başarısız oldu. Paket indirilemedi:
NuGet şunu döndürdü:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">Yükleme başarısız oldu. Aracın NuGet paketindeki ayarlar dosyası geçerli değil. Lütfen NuGet paketinin sahibine başvurun.
Hata:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">Yüklenecek aracın NuGet Paket Kimliği.</target>
@ -113,6 +80,26 @@ Hata:
<target state="translated">Yalnızca kullanıcı için araçlar desteklendiğinden --global anahtarı (-g) şu anda gereklidir.</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ WorkingDirectory: {0}
输出: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">未能还原包。
WorkingDirectory: {0}
参数: {1}
输出: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">安装失败。未能下载包:
NuGet 已返回:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">安装失败。工具的 NuGet 包中的设置文件无效。请联系 NuGet 包的所有者。
错误:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">要安装的工具的 NuGet 包 ID。</target>
@ -113,6 +80,26 @@ The error was:
<target state="translated">目前需要 --global 开关 (-g),因为仅支持用户范围工具。</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -30,39 +30,6 @@ WorkingDirectory: {0}
輸出: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="FailedToRestorePackage">
<source>Failed to restore package.
WorkingDirectory: {0}
Arguments: {1}
Output: {2}{3}</source>
<target state="translated">無法還原套件。
WorkingDirectory: {0}
引數: {1}
輸出: {2}{3}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedNuget">
<source>Install failed. Failed to download package:
NuGet returned:
{0}</source>
<target state="translated">安裝失敗。無法下載套件:
傳回的 NuGet:
{0}</target>
<note />
</trans-unit>
<trans-unit id="InstallFailedPackage">
<source>Install failed. The settings file in the tool's NuGet package is not valid. Please contact the owner of the NuGet package.
The error was:
{0}</source>
<target state="translated">安裝失敗。工具 NuGet 套件中的設定檔無效。請連絡 NuGet 套件的擁有者。
錯誤為:
{0}</target>
<note />
</trans-unit>
<trans-unit id="PackageIdArgumentDescription">
<source>NuGet Package Id of the tool to install.</source>
<target state="translated">要安裝之工具的 NuGet 套件識別碼。</target>
@ -113,6 +80,26 @@ The error was:
<target state="translated">因為只支援適用於全體使用者的工具,所以目前必須有 --global 參數 (-g)。</target>
<note />
</trans-unit>
<trans-unit id="InvalidToolConfiguration">
<source>The settings file in the tool's NuGet package is invalid: {0}</source>
<target state="new">The settings file in the tool's NuGet package is invalid: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailed">
<source>Tool '{0}' failed to install.</source>
<target state="new">Tool '{0}' failed to install.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationFailedContactAuthor">
<source>Tool '{0}' failed to install. Please contact the tool author for assistance.</source>
<target state="new">Tool '{0}' failed to install. Please contact the tool author for assistance.</target>
<note />
</trans-unit>
<trans-unit id="ToolInstallationRestoreFailed">
<source>The tool package could not be restored.</source>
<target state="new">The tool package could not be restored.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">Projekt {0} byl z řešení odebrán.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Nemůže být null nebo prázdný znak.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Obsahuje nejméně jeden neplatný znak: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">Soubor nastavení nástroje je neplatný soubor xml.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">Soubor nastavení nástroje má jiný spouštěč než dotnet.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">Soubor nastavení nástroje má definovaný více než jeden příkaz.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">Soubor nastavení nástroje obsahuje chybu.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">Soubor nastavení nástroje je neplatný soubor xml.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">V balíčku {0} chybí soubor nastavení nástroje DotnetToolSettings.xml.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">Das Projekt "{0}" wurde aus der Projektmappe entfernt.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Darf nicht NULL sein oder Leerraum enthalten.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Enthält mindestens ein ungültiges Zeichen: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">Die Datei mit den Tooleinstellungen ist eine ungültige XML.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">Die Datei mit den Tooleinstellungen verwendet nicht "dotnet" als Runner.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">In der Datei mit den Tooleinstellungen ist mehr als ein Befehl definiert.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">Die Datei mit den Tooleinstellungen enthält einen Fehler.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">Die Datei mit den Tooleinstellungen ist eine ungültige XML.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">Im Paket "{0}" fehlt die Datei mit den Tooleinstellungen "DotnetToolSettings.xml".</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">Se ha quitado el proyecto "{0}" de la solución.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">No puede ser nulo ni un espacio en blanco.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Contiene uno o varios caracteres no válidos: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">El archivo de configuración de la herramienta es un xml no válido.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">El archivo de configuración de la herramienta tiene un ejecutor diferente de "dotnet".</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">El archivo de configuración de la herramienta tiene más de un comando definido.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">El archivo de configuración de la herramienta contiene un error.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">El archivo de configuración de la herramienta es un xml no válido.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">Al paquete "{0}" le falta el archivo de configuración de herramientas DotnetToolSettings.xml.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">Projet '{0}' retiré de la solution.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Ne peut pas avoir une valeur null ou être un espace blanc</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Contient un ou plusieurs caractères non valides : {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">Le fichier de paramètres de l'outil est un fichier xml non valide.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">Le fichier de paramètres de l'outil n'a pas "dotnet" comme exécuteur.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">Plusieurs commandes sont définies pour le fichier de paramètres de l'outil.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">Le fichier de paramètres de l'outil contient une erreur.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">Le fichier de paramètres de l'outil est un fichier xml non valide.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">Le package '{0}' ne contient pas le fichier de paramètres d'outils DotnetToolSettings.xml.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">Il progetto `{0}` è stato rimosso dalla soluzione.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Non può essere Null o costituito da spazi vuoti.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Contiene uno o più caratteri non validi: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">Il file di impostazioni dello strumento è costituito da codice XML non valido.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">Lo strumento di esecuzione del file di impostazioni dello strumento non è "dotnet".</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">Per il file di impostazioni dello strumento è definito più di un comando.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">Il file di impostazioni dello strumento contiene un errore.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">Il file di impostazioni dello strumento è costituito da codice XML non valido.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">Nel pacchetto '{0}' manca il file di impostazioni dello strumento DotnetToolSettings.xml.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">プロジェクト `{0}` がソリューションから削除されました。</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">null または空白文字にすることはできません。</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">1 つ以上の無効な文字が含まれています: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">ツールの設定ファイルは無効な xml です。
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">ツールの設定ファイルにはランナーとしての非 "dotnet" があります。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">ツールの設定ファイルで複数のコマンドが定義されています。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">ツールの設定ファイルにエラーが含まれています。
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">ツールの設定ファイルは無効な xml です。
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">パッケージ '{0}' にツール設定ファイル DotnetToolSettings.xml がありません。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">'{0}' 프로젝트가 솔루션에서 제거되었습니다.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">null 또는 공백일 수 없습니다.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">잘못된 문자가 하나 이상 포함되어 있습니다. {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">도구의 설정 파일이 잘못된 xml입니다.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">도구의 설정 파일에 실행기로서 “dotnet”이 없습니다.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">도구의 설정 파일에 정의된 명령이 하나 이상 있습니다.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">도구의 설정 파일에 오류가 있습니다.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">도구의 설정 파일이 잘못된 xml입니다.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">패키지 '{0}'이(가) 누락된 도구 설정 파일 DotnetToolSettings.xml입니다.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">Projekt „{0}” został skasowany z rozwiązania.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Nie może być wartością null ani białym znakiem.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Zawiera co najmniej jeden niedozwolony znak: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">Plik ustawień narzędzia nie jest prawidłowym plikiem xml.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">Plik ustawień narzędzia zawiera wartość modułu uruchamiającego inną niż „dotnet”.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">Plik ustawień narzędzia zawiera więcej niż jedno zdefiniowane polecenie.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">Plik ustawień narzędzia zawiera błąd.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">Plik ustawień narzędzia nie jest prawidłowym plikiem xml.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">Brak pliku ustawień narzędzia DotnetToolSettings.xml w pakiecie „{0}”.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">O projeto `{0}` foi removido da solução.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Não pode ser nulo nem espaço em branco.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Contém um ou mais caracteres inválidos: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">O arquivo de configuração da ferramenta é um XML inválido.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">O arquivo de configuração da ferramenta contém um executor não "dotnet".</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">O arquivo de configuração da ferramenta contém mais de um comando definido.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">O arquivo de configuração da ferramenta contém um erro.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">O arquivo de configuração da ferramenta é um XML inválido.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">O arquivo de configuração DotnetToolSettings.xml da ferramenta está ausente do pacote '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">Проект "{0}" удален из решения.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Не может быть пустым или равным NULL.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Содержит недопустимые символы: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">Файл параметров инструмента является недопустимым XML.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">Средство запуска в файле параметров инструмента не является "dotnet".</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">В файле параметров инструмента задано больше одной команды.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">Файл параметров инструмента содержит ошибку.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">Файл параметров инструмента является недопустимым XML.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">В пакете "{0}" отсутствует файл параметров инструмента DotnetToolSettings.xml.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">`{0}` projesi çözümden kaldırıldı.</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">Null veya boşluk olamaz.</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">Bir veya daha fazla geçersiz karakter içeriyor: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">Aracın ayarlar dosyası geçersiz xml içeriyor.
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">Aracın ayarlar dosyası çalıştırıcı olarak "dotnet" dışında bir öğe içeriyor.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">Aracın ayarlar dosyasında birden çok komut tanımlanmış.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">Aracın ayarlar dosyası hata içeriyor.
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">Aracın ayarlar dosyası geçersiz xml içeriyor.
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">'{0}' paketinde DotnetToolSettings.xml araç ayarları dosyası eksik.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">已从解决方案中移除项目“{0}”。</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">不能为 NULL 或空白。</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">包含一个或多个无效字符: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">工具的设置文件为无效 xml。
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">工具的设置文件不具有作为运行程序的 "dotnet"。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">工具的设置文件已定义多个命令。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">工具的设置文件包含错误。
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">工具的设置文件为无效 xml。
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">包“{0}”缺少工具设置文件 DotnetToolSettings.xml。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -674,37 +674,9 @@
<target state="translated">專案 `{0}` 已從解決方案移除。</target>
<note />
</trans-unit>
<trans-unit id="CannotBeNullOrWhitespace">
<source>Cannot be null or whitespace.</source>
<target state="translated">不得為 null 或空白字元。</target>
<note />
</trans-unit>
<trans-unit id="ContainInvalidCharacters">
<source>Contains one or more invalid characters: {0}</source>
<target state="translated">內含一或多個無效字元: {0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidXml">
<source>The tool's settings file is invalid xml.
{0}</source>
<target state="translated">工具設定檔為無效的 XML。
{0}</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingInvalidRunner">
<source>The tool's settings file has non "dotnet" as runner.</source>
<target state="translated">工具設定檔的執行器並非 "dotnet"。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingMoreThanOneCommand">
<source>The tool's settings file has more than one command defined.</source>
<target state="translated">工具設定檔定義了超過一個的命令。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsContainError">
<source>The tool's settings file contains error.
{0}</source>
<target state="translated">工具設定檔內含錯誤。
<source>Invalid XML: {0}</source>
<target state="needs-review-translation">工具設定檔為無效的 XML。
{0}</target>
<note />
</trans-unit>
@ -797,6 +769,36 @@ setx PATH "%PATH%;{1}"</target>
<target state="translated">套件 '{0}' 缺少工具設定檔 DotnetToolSettings.xml。</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingCommandName">
<source>Tool defines a command with a missing name setting.</source>
<target state="new">Tool defines a command with a missing name setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMissingEntryPoint">
<source>Command '{0}' is missing an entry point setting.</source>
<target state="new">Command '{0}' is missing an entry point setting.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsInvalidCommandName">
<source>Command '{0}' contains one or more of the following invalid characters: {1}.</source>
<target state="new">Command '{0}' contains one or more of the following invalid characters: {1}.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsMoreThanOneCommand">
<source>More than one command is defined for the tool.</source>
<target state="new">More than one command is defined for the tool.</target>
<note />
</trans-unit>
<trans-unit id="ToolSettingsUnsupportedRunner">
<source>Command '{0}' uses unsupported runner '{1}'."</source>
<target state="new">Command '{0}' uses unsupported runner '{1}'."</target>
<note />
</trans-unit>
<trans-unit id="ToolPackageConflictPackageId">
<source>Tool '{0}' is already installed.</source>
<target state="new">Tool '{0}' is already installed.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -37,15 +37,15 @@
</Content>
</ItemGroup>
<Target Name="PublishAspNetRuntimePackageStore"
<Target Name="PublishAspNetSharedFramework"
AfterTargets="CrossgenPublishDir">
<ItemGroup>
<AspNetRuntimePackageStore Remove="*" />
<AspNetRuntimePackageStore Include="$(AspNetRuntimePackageStorePublishDirectory)/**/*" />
<AspNetSharedFramework Remove="*" />
<AspNetSharedFramework Include="$(AspNetCoreSharedFxPublishDirectory)/**/*" />
</ItemGroup>
<Copy SourceFiles="@(AspNetRuntimePackageStore)"
DestinationFiles="@(AspNetRuntimePackageStore->'$(OutputDirectory)/%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(AspNetSharedFramework)"
DestinationFiles="@(AspNetSharedFramework->'$(OutputDirectory)/%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="PublishSharedFramework"
@ -69,7 +69,7 @@
<Target Name="PublishRoslyn"
BeforeTargets="Publish">
<ItemGroup>
<RoslynBits Include="$(NuGetPackagesDir)/microsoft.netcore.compilers/$(MicrosoftNETCoreCompilersPackageVersion)/tools/**/*" />
</ItemGroup>
@ -83,6 +83,7 @@
<RoslynDeps Include="$(RoslynDirectory)/bincore/vbc.deps.json" />
<RoslynDeps Include="$(RoslynDirectory)/bincore/VBCSCompiler.deps.json" />
<RoslynSatelliteDeps Include="$(RoslynDirectory)/bincore/tool_roslyn_satellites.deps.json" />
<RoslynFrameworkAssemblies Include="$(RoslynDirectory)/System.*.dll;$(RoslynDirectory)/runtimes/**/System.*.dll" Exclude="$(RoslynDirectory)/runtimes/**/System.IO.Pipes.AccessControl.dll"/>
</ItemGroup>
<PropertyGroup>
<ReplacementPattern>"version": ".*"</ReplacementPattern>
@ -98,12 +99,12 @@
Configuration="$(Configuration)"
ProjectPath="$(SrcDirectory)/tool_roslyn_satellites/tool_roslyn_satellites.csproj" />
<AddToDeps TargetDeps="@(RoslynDeps)" AdditionalDeps="@(RoslynSatelliteDeps)" />
<Delete Files="@(RoslynSatelliteDeps)" />
<Delete Files="@(RoslynSatelliteDeps);@(RoslynFrameworkAssemblies)" />
</Target>
<Target Name="PublishFSharp"
BeforeTargets="Publish">
<DotNetPublish ToolPath="$(PreviousStageDirectory)"
Configuration="$(Configuration)"
ProjectPath="$(SrcDirectory)/tool_fsharp/tool_fsc.csproj" />
@ -140,7 +141,7 @@
<DestinationPath Condition="'%(MSBuildExtensionsContent.DestinationPath)' == ''">$(PublishDir)/%(MSBuildExtensionsContent.DeploymentSubpath)%(RecursiveDir)%(Filename)%(Extension)</DestinationPath>
</MSBuildExtensionsContent>
</ItemGroup>
<Copy SourceFiles="@(MSBuildExtensionsContent)"
DestinationFiles="%(MSBuildExtensionsContent.DestinationPath)" />
@ -261,11 +262,11 @@
<RoslynTargets Include="%(RoslynFilesWithPEMarker.FullPath)" Condition=" '%(RoslynFilesWithPEMarker.IsPE)' == 'True' " />
<FSharpTargets Include="%(FSharpFilesWithPEMarker.FullPath)" Condition=" '%(FSharpFilesWithPEMarker.IsPE)' == 'True' " />
<RemainingTargets Include="%(RemainingFilesWithPEMarker.FullPath)" Condition=" '%(RemainingFilesWithPEMarker.IsPE)' == 'True' " />
<RoslynFolders Include="@(RoslynTargets-&gt;DirectoryName()-&gt;Distinct())" />
<FSharpFolders Include="@(FSharpTargets-&gt;DirectoryName()-&gt;Distinct())" />
<RemainingFolders Include="@(RemainingTargets-&gt;DirectoryName()-&gt;Distinct())" />
<!-- FSharp.Build.dll causes the FSharp folder to be included. Remove it, as we don't want other FSharp dlls being included in the crossgen. -->
<RemainingFolders Remove="$(PublishDir)FSharp\**\*" />
</ItemGroup>
@ -290,7 +291,7 @@
CreateSymbols="$(CreateCrossgenSymbols)"
DiasymReaderPath="@(DiasymReaderPath)"
PlatformAssemblyPaths="@(PlatformAssemblies);@(RoslynFolders);$(SharedFrameworkNameVersionPath)" />
<Crossgen
SourceAssembly="%(FSharpTargets.FullPath)"
DestinationPath="%(FSharpTargets.FullPath)"
@ -315,7 +316,7 @@
<Target Name="ChmodPublishDir"
AfterTargets="CrossgenPublishDir"
Condition=" '$(OSName)' != 'win' ">
<Exec Command="find $(SdkOutputDirectory) -type d -exec chmod 755 {} \;" />
<Exec Command="find $(SdkOutputDirectory) -type f -exec chmod 644 {} \;" />
<Chmod Mode="755" Glob="$(SdkOutputDirectory)/FSharp/RunFsc.sh" />
@ -329,7 +330,7 @@
<PdbsToMove Include="$(PublishDir)/**/*.ni.*.map" />
</ItemGroup>
<Move SourceFiles="@(PdbsToMove)"
<Move SourceFiles="@(PdbsToMove)"
DestinationFiles="@(PdbsToMove->'$(SymbolsDirectory)/sdk/$(SdkVersion)/%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>

View file

@ -12,7 +12,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.NetCore.App" Version="$(MicrosoftNETCoreAppPackageVersion)" />
<PackageReference Include="Microsoft.FSharp.Compiler" Version="$(MicrosoftFSharpCompilerPackageVersion)" />
<PackageReference Include="CliDeps.Satellites.FSharp" Version="$(CliDepsSatellitesFSharpPackageVersion)" />
<PackageReference Include="System.Runtime.InteropServices" Version="4.3.0" />
</ItemGroup>

View file

@ -25,4 +25,8 @@
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
</Project>

View file

@ -1,4 +1,4 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2008
MinimumVisualStudioVersion = 10.0.40219.1
@ -88,6 +88,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.ToolPackag
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Tools.Tests.ComponentMocks", "Microsoft.DotNet.Tools.Tests.ComponentMocks\Microsoft.DotNet.Tools.Tests.ComponentMocks.csproj", "{A3DE5654-7755-45C8-8AE5-5B5B00BEB248}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-install-tool.Tests", "dotnet-install-tool.Tests\dotnet-install-tool.Tests.csproj", "{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -578,6 +580,18 @@ Global
{A3DE5654-7755-45C8-8AE5-5B5B00BEB248}.Release|x64.Build.0 = Release|Any CPU
{A3DE5654-7755-45C8-8AE5-5B5B00BEB248}.Release|x86.ActiveCfg = Release|Any CPU
{A3DE5654-7755-45C8-8AE5-5B5B00BEB248}.Release|x86.Build.0 = Release|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Debug|x64.ActiveCfg = Debug|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Debug|x64.Build.0 = Debug|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Debug|x86.ActiveCfg = Debug|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Debug|x86.Build.0 = Debug|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Release|Any CPU.Build.0 = Release|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Release|x64.ActiveCfg = Release|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Release|x64.Build.0 = Release|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Release|x86.ActiveCfg = Release|Any CPU
{E2F5F115-0DE4-4CC0-920C-EF6F89D15EAB}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -170,6 +170,11 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_directories.Add(path);
CreateDirectoryInvoked = true;
}
public void Delete(string path, bool recursive)
{
throw new NotImplementedException();
}
}
}
}
}

View file

@ -124,6 +124,11 @@ namespace Microsoft.DotNet.Configurer.UnitTests
{
throw new UnauthorizedAccessException();
}
public void Delete(string path)
{
throw new UnauthorizedAccessException();
}
}
private class NoPermissionDirectoryFake : IDirectory
@ -153,6 +158,11 @@ namespace Microsoft.DotNet.Configurer.UnitTests
{
throw new UnauthorizedAccessException();
}
public void Delete(string path, bool recursive)
{
throw new NotImplementedException();
}
}
private class Counter

View file

@ -197,6 +197,11 @@ namespace Microsoft.DotNet.Configurer.UnitTests
{
throw new UnauthorizedAccessException();
}
public void Delete(string path, bool recursive)
{
throw new NotImplementedException();
}
}
private class FileMock : IFile
@ -256,6 +261,11 @@ namespace Microsoft.DotNet.Configurer.UnitTests
{
throw new NotImplementedException();
}
public void Delete(string path)
{
throw new NotImplementedException();
}
}
private class MockStream : MemoryStream

View file

@ -0,0 +1,23 @@
// 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.Cli.Utils;
using Microsoft.DotNet.Tools.Test.Utilities;
using FluentAssertions;
namespace Microsoft.DotNet.Configurer.UnitTests
{
public class GivenAPathCalculator
{
[NonWindowsOnlyFact]
public void It_does_not_return_same_path_for_tools_package_and_tool_shim()
{
// shim name will conflict with the folder that is PackageId, if commandName and packageId are the same.
var cliFolderPathCalculator = new CliFolderPathCalculator();
cliFolderPathCalculator.ToolsPackagePath.Should().NotBe(cliFolderPathCalculator.ToolsShimPath);
cliFolderPathCalculator.ToolsPackagePath.Should().NotBe(cliFolderPathCalculator.ToolsShimPathInUnix.Path);
}
}
}

View file

@ -50,6 +50,11 @@ namespace Microsoft.DotNet.ShellShim.Tests
_files[path] = content;
}
public void Delete(string path)
{
throw new NotImplementedException();
}
public static FakeFile Empty => new FakeFile(new Dictionary<string, string>());
}
}

View file

@ -1,28 +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 Microsoft.DotNet.Cli.Utils;
namespace Microsoft.DotNet.ShellShim.Tests
{
internal class FakeReporter : IReporter
{
public string Message { get; private set; } = "";
public void WriteLine(string message)
{
Message = message;
}
public void WriteLine()
{
throw new NotImplementedException();
}
public void Write(string message)
{
throw new NotImplementedException();
}
}
}

View file

@ -19,10 +19,10 @@ namespace Microsoft.DotNet.ShellShim.Tests
[Fact]
public void GivenEnvironmentAndReporterItCanPrintOutInstructionToAddPath()
{
var fakeReporter = new FakeReporter();
var reporter = new BufferedReporter();
var linuxEnvironmentPath = new LinuxEnvironmentPath(
new BashPathUnderHomeDirectory("/myhome", "executable/path"),
fakeReporter,
reporter,
new FakeEnvironmentProvider(
new Dictionary<string, string>
{
@ -33,7 +33,7 @@ namespace Microsoft.DotNet.ShellShim.Tests
linuxEnvironmentPath.PrintAddPathInstructionIfPathDoesNotExist();
// similar to https://code.visualstudio.com/docs/setup/mac
fakeReporter.Message.Should().Be(
reporter.Lines.Should().Equal(
string.Format(
CommonLocalizableStrings.EnvironmentPathLinuxManualInstruction,
"/myhome/executable/path", "/myhome/executable/path"));
@ -42,10 +42,10 @@ namespace Microsoft.DotNet.ShellShim.Tests
[Fact]
public void GivenEnvironmentAndReporterItPrintsNothingWhenenvironmentExists()
{
var fakeReporter = new FakeReporter();
var reporter = new BufferedReporter();
var linuxEnvironmentPath = new LinuxEnvironmentPath(
new BashPathUnderHomeDirectory("/myhome", "executable/path"),
fakeReporter,
reporter,
new FakeEnvironmentProvider(
new Dictionary<string, string>
{
@ -55,16 +55,16 @@ namespace Microsoft.DotNet.ShellShim.Tests
linuxEnvironmentPath.PrintAddPathInstructionIfPathDoesNotExist();
fakeReporter.Message.Should().BeEmpty();
reporter.Lines.Should().BeEmpty();
}
[Fact]
public void GivenAddPackageExecutablePathToUserPathJustRunItPrintsInstructionToLogout()
{
var fakeReporter = new FakeReporter();
var reporter = new BufferedReporter();
var linuxEnvironmentPath = new LinuxEnvironmentPath(
new BashPathUnderHomeDirectory("/myhome", "executable/path"),
fakeReporter,
reporter,
new FakeEnvironmentProvider(
new Dictionary<string, string>
{
@ -75,8 +75,8 @@ namespace Microsoft.DotNet.ShellShim.Tests
linuxEnvironmentPath.PrintAddPathInstructionIfPathDoesNotExist();
fakeReporter.Message.Should()
.Be(CommonLocalizableStrings.EnvironmentPathLinuxNeedLogout);
reporter.Lines.Should()
.Equal(CommonLocalizableStrings.EnvironmentPathLinuxNeedLogout);
}
}
}

View file

@ -19,10 +19,10 @@ namespace Microsoft.DotNet.ShellShim.Tests
[Fact]
public void GivenEnvironmentAndReporterItCanPrintOutInstructionToAddPath()
{
var fakeReporter = new FakeReporter();
var reporter = new BufferedReporter();
var osxEnvironmentPath = new OSXEnvironmentPath(
new BashPathUnderHomeDirectory("/myhome", "executable/path"),
fakeReporter,
reporter,
new FakeEnvironmentProvider(
new Dictionary<string, string>
{
@ -33,7 +33,7 @@ namespace Microsoft.DotNet.ShellShim.Tests
osxEnvironmentPath.PrintAddPathInstructionIfPathDoesNotExist();
// similar to https://code.visualstudio.com/docs/setup/mac
fakeReporter.Message.Should().Be(
reporter.Lines.Should().Equal(
string.Format(
CommonLocalizableStrings.EnvironmentPathOSXManualInstruction,
"/myhome/executable/path", "/myhome/executable/path"));
@ -44,10 +44,10 @@ namespace Microsoft.DotNet.ShellShim.Tests
[InlineData("~/executable/path")]
public void GivenEnvironmentAndReporterItPrintsNothingWhenenvironmentExists(string existingPath)
{
var fakeReporter = new FakeReporter();
var reporter = new BufferedReporter();
var osxEnvironmentPath = new OSXEnvironmentPath(
new BashPathUnderHomeDirectory("/myhome", "executable/path"),
fakeReporter,
reporter,
new FakeEnvironmentProvider(
new Dictionary<string, string>
{
@ -57,16 +57,16 @@ namespace Microsoft.DotNet.ShellShim.Tests
osxEnvironmentPath.PrintAddPathInstructionIfPathDoesNotExist();
fakeReporter.Message.Should().BeEmpty();
reporter.Lines.Should().BeEmpty();
}
[Fact]
public void GivenAddPackageExecutablePathToUserPathJustRunItPrintsInstructionToLogout()
{
var fakeReporter = new FakeReporter();
var reporter = new BufferedReporter();
var osxEnvironmentPath = new OSXEnvironmentPath(
new BashPathUnderHomeDirectory("/myhome", "executable/path"),
fakeReporter,
reporter,
new FakeEnvironmentProvider(
new Dictionary<string, string>
{
@ -77,7 +77,7 @@ namespace Microsoft.DotNet.ShellShim.Tests
osxEnvironmentPath.PrintAddPathInstructionIfPathDoesNotExist();
fakeReporter.Message.Should().Be(CommonLocalizableStrings.EnvironmentPathOSXNeedReopen);
reporter.Lines.Should().Equal(CommonLocalizableStrings.EnvironmentPathOSXNeedReopen);
}
}
}

View file

@ -6,14 +6,16 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Transactions;
using System.Xml.Linq;
using FluentAssertions;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.TestFramework;
using Microsoft.DotNet.ToolPackage;
using Microsoft.DotNet.Tools;
using Microsoft.DotNet.Tools.Test.Utilities;
using Microsoft.DotNet.Tools.Test.Utilities.Mock;
using Microsoft.DotNet.Tools.Tests.ComponentMocks;
using Microsoft.Extensions.EnvironmentAbstractions;
using Xunit;
using Xunit.Abstractions;
@ -32,27 +34,29 @@ namespace Microsoft.DotNet.ShellShim.Tests
[InlineData("my_native_app.exe", null)]
[InlineData("./my_native_app.js", "nodejs")]
[InlineData(@"C:\tools\my_native_app.dll", "dotnet")]
public void GivenAnRunnerOrEntryPointItCanCreateConfig(string entryPoint, string runner)
public void GivenAnRunnerOrEntryPointItCanCreateConfig(string entryPointPath, string runner)
{
var entryPoint = new FilePath(entryPointPath);
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
return;
var shellShimMaker = new ShellShimMaker(TempRoot.Root);
var cleanFolderUnderTempRoot = GetNewCleanFolderUnderTempRoot();
var shellShimMaker = new ShellShimMaker(cleanFolderUnderTempRoot);
var tmpFile = Path.Combine(TempRoot.Root, Path.GetRandomFileName());
var tmpFile = new FilePath(Path.Combine(cleanFolderUnderTempRoot, Path.GetRandomFileName()));
shellShimMaker.CreateConfigFile(tmpFile, entryPoint, runner);
new FileInfo(tmpFile).Should().Exist();
new FileInfo(tmpFile.Value).Should().Exist();
var generated = XDocument.Load(tmpFile);
var generated = XDocument.Load(tmpFile.Value);
generated.Descendants("appSettings")
.Descendants("add")
.Should()
.Contain(e => e.Attribute("key").Value == "runner" && e.Attribute("value").Value == (runner ?? string.Empty))
.And
.Contain(e => e.Attribute("key").Value == "entryPoint" && e.Attribute("value").Value == entryPoint);
.Contain(e => e.Attribute("key").Value == "entryPoint" && e.Attribute("value").Value == entryPoint.Value);
}
[Fact]
@ -60,16 +64,49 @@ namespace Microsoft.DotNet.ShellShim.Tests
{
var outputDll = MakeHelloWorldExecutableDll();
var shellShimMaker = new ShellShimMaker(TempRoot.Root);
var cleanFolderUnderTempRoot = GetNewCleanFolderUnderTempRoot();
var shellShimMaker = new ShellShimMaker(cleanFolderUnderTempRoot);
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
shellShimMaker.CreateShim(
outputDll.FullName,
shellCommandName);
var stdOut = ExecuteInShell(shellCommandName);
shellShimMaker.CreateShim(outputDll, shellCommandName);
var stdOut = ExecuteInShell(shellCommandName, cleanFolderUnderTempRoot);
stdOut.Should().Contain("Hello World");
}
[Fact]
public void GivenAnExecutablePathItCanGenerateShimFileInTransaction()
{
var outputDll = MakeHelloWorldExecutableDll();
var cleanFolderUnderTempRoot = GetNewCleanFolderUnderTempRoot();
var shellShimMaker = new ShellShimMaker(cleanFolderUnderTempRoot);
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
using (var transactionScope = new TransactionScope())
{
shellShimMaker.CreateShim(outputDll, shellCommandName);
transactionScope.Complete();
}
var stdOut = ExecuteInShell(shellCommandName, cleanFolderUnderTempRoot);
stdOut.Should().Contain("Hello World");
}
[Fact]
public void GivenAnExecutablePathDirectoryThatDoesNotExistItCanGenerateShimFile()
{
var outputDll = MakeHelloWorldExecutableDll();
var extraNonExistDirectory = Path.GetRandomFileName();
var shellShimMaker = new ShellShimMaker(Path.Combine(TempRoot.Root, extraNonExistDirectory));
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
Action a = () => shellShimMaker.CreateShim(outputDll, shellCommandName);
a.ShouldNotThrow<DirectoryNotFoundException>();
}
[Theory]
[InlineData("arg1 arg2", new[] { "arg1", "arg2" })]
@ -79,14 +116,13 @@ namespace Microsoft.DotNet.ShellShim.Tests
{
var outputDll = MakeHelloWorldExecutableDll();
var shellShimMaker = new ShellShimMaker(TempRoot.Root);
var cleanFolderUnderTempRoot = GetNewCleanFolderUnderTempRoot();
var shellShimMaker = new ShellShimMaker(cleanFolderUnderTempRoot);
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
shellShimMaker.CreateShim(
outputDll.FullName,
shellCommandName);
shellShimMaker.CreateShim(outputDll, shellCommandName);
var stdOut = ExecuteInShell(shellCommandName, arguments);
var stdOut = ExecuteInShell(shellCommandName, cleanFolderUnderTempRoot, arguments);
for (int i = 0; i < expectedPassThru.Length; i++)
{
@ -100,17 +136,17 @@ namespace Microsoft.DotNet.ShellShim.Tests
public void GivenAnExecutablePathWithExistingSameNameShimItThrows(bool testMockBehaviorIsInSync)
{
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
MakeNameConflictingCommand(TempRoot.Root, shellCommandName);
var cleanFolderUnderTempRoot = GetNewCleanFolderUnderTempRoot();
MakeNameConflictingCommand(cleanFolderUnderTempRoot, shellCommandName);
IShellShimMaker shellShimMaker;
if (testMockBehaviorIsInSync)
{
shellShimMaker = new ShellShimMakerMock(TempRoot.Root);
shellShimMaker = new ShellShimMakerMock(cleanFolderUnderTempRoot);
}
else
{
shellShimMaker = new ShellShimMaker(TempRoot.Root);
shellShimMaker = new ShellShimMaker(cleanFolderUnderTempRoot);
}
Action a = () => shellShimMaker.EnsureCommandNameUniqueness(shellCommandName);
@ -123,18 +159,89 @@ namespace Microsoft.DotNet.ShellShim.Tests
[Theory]
[InlineData(false)]
[InlineData(true)]
public void GivenAnExecutablePathWithoutExistingSameNameShimItShouldNotThrow(bool testMockBehaviorIsInSync)
public void GivenAnExecutablePathWithExistingSameNameShimItRollsBack(bool testMockBehaviorIsInSync)
{
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
var pathToShim = GetNewCleanFolderUnderTempRoot();
MakeNameConflictingCommand(pathToShim, shellCommandName);
IShellShimMaker shellShimMaker;
if (testMockBehaviorIsInSync)
{
shellShimMaker = new ShellShimMakerMock(TempRoot.Root);
shellShimMaker = new ShellShimMakerMock(pathToShim);
}
else
{
shellShimMaker = new ShellShimMaker(TempRoot.Root);
shellShimMaker = new ShellShimMaker(pathToShim);
}
Action a = () =>
{
using (var t = new TransactionScope())
{
shellShimMaker.CreateShim(new FilePath("dummy.dll"), shellCommandName);
t.Complete();
}
};
a.ShouldThrow<GracefulException>();
Directory.GetFiles(pathToShim).Should().HaveCount(1, "there is only intent conflicted command");
}
[Theory]
[InlineData(false)]
[InlineData(true)]
public void GivenAnExecutablePathErrorHappensItRollsBack(bool testMockBehaviorIsInSync)
{
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
var pathToShim = GetNewCleanFolderUnderTempRoot();
IShellShimMaker shellShimMaker;
if (testMockBehaviorIsInSync)
{
shellShimMaker = new ShellShimMakerMock(pathToShim);
}
else
{
shellShimMaker = new ShellShimMaker(pathToShim);
}
Action intendedError = () => throw new PackageObtainException();
Action a = () =>
{
using (var t = new TransactionScope())
{
shellShimMaker.CreateShim(new FilePath("dummy.dll"), shellCommandName);
intendedError();
t.Complete();
}
};
a.ShouldThrow<PackageObtainException>();
Directory.GetFiles(pathToShim).Should().BeEmpty();
}
[Theory]
[InlineData(false)]
[InlineData(true)]
public void GivenAnExecutablePathWithoutExistingSameNameShimItShouldNotThrow(bool testMockBehaviorIsInSync)
{
var shellCommandName = nameof(ShellShimMakerTests) + Path.GetRandomFileName();
var cleanFolderUnderTempRoot = GetNewCleanFolderUnderTempRoot();
IShellShimMaker shellShimMaker;
if (testMockBehaviorIsInSync)
{
shellShimMaker = new ShellShimMakerMock(cleanFolderUnderTempRoot);
}
else
{
shellShimMaker = new ShellShimMaker(cleanFolderUnderTempRoot);
}
Action a = () => shellShimMaker.EnsureCommandNameUniqueness(shellCommandName);
@ -143,16 +250,21 @@ namespace Microsoft.DotNet.ShellShim.Tests
private static void MakeNameConflictingCommand(string pathToPlaceShim, string shellCommandName)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
shellCommandName = shellCommandName + ".exe";
}
File.WriteAllText(Path.Combine(pathToPlaceShim, shellCommandName), string.Empty);
}
private string ExecuteInShell(string shellCommandName, string arguments = "")
private string ExecuteInShell(string shellCommandName, string cleanFolderUnderTempRoot, string arguments = "")
{
ProcessStartInfo processStartInfo;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var file = Path.Combine(TempRoot.Root, shellCommandName + ".exe");
var file = Path.Combine(cleanFolderUnderTempRoot, shellCommandName + ".exe");
processStartInfo = new ProcessStartInfo
{
FileName = file,
@ -171,7 +283,7 @@ namespace Microsoft.DotNet.ShellShim.Tests
}
_output.WriteLine($"Launching '{processStartInfo.FileName} {processStartInfo.Arguments}'");
processStartInfo.WorkingDirectory = TempRoot.Root;
processStartInfo.WorkingDirectory = cleanFolderUnderTempRoot;
processStartInfo.EnvironmentVariables["PATH"] = Path.GetDirectoryName(new Muxer().MuxerPath);
processStartInfo.ExecuteAndCaptureOutput(out var stdOut, out var stdErr);
@ -181,7 +293,7 @@ namespace Microsoft.DotNet.ShellShim.Tests
return stdOut ?? "";
}
private static FileInfo MakeHelloWorldExecutableDll()
private static FilePath MakeHelloWorldExecutableDll()
{
const string testAppName = "TestAppSimple";
const string emptySpaceToTestSpaceInPath = " ";
@ -197,7 +309,15 @@ namespace Microsoft.DotNet.ShellShim.Tests
.GetDirectories().Single()
.GetFile($"{testAppName}.dll");
return outputDll;
return new FilePath(outputDll.FullName);
}
private static string GetNewCleanFolderUnderTempRoot()
{
DirectoryInfo CleanFolderUnderTempRoot = new DirectoryInfo(Path.Combine(TempRoot.Root, "cleanfolder" + Path.GetRandomFileName()));
CleanFolderUnderTempRoot.Create();
return CleanFolderUnderTempRoot.FullName;
}
}
}

Some files were not shown because too many files have changed in this diff Show more