Merge pull request #9332 from dotnet/merges/release/2.1.4xx-to-master
Merge release/2.1.4xx to master
This commit is contained in:
commit
80d542b8f4
15 changed files with 274 additions and 92 deletions
|
@ -5,7 +5,7 @@
|
|||
<MicrosoftAspNetCoreAppPackageVersion>$(MicrosoftAspNetCoreAllPackageVersion)</MicrosoftAspNetCoreAppPackageVersion>
|
||||
<MicrosoftNETCoreAppPackageVersion>2.1.0-rtm-26515-03</MicrosoftNETCoreAppPackageVersion>
|
||||
<MicrosoftNETCoreDotNetHostResolverPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</MicrosoftNETCoreDotNetHostResolverPackageVersion>
|
||||
<MicrosoftBuildPackageVersion>15.7.179</MicrosoftBuildPackageVersion>
|
||||
<MicrosoftBuildPackageVersion>15.8.0-preview-000061</MicrosoftBuildPackageVersion>
|
||||
<MicrosoftBuildFrameworkPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildFrameworkPackageVersion>
|
||||
<MicrosoftBuildRuntimePackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildRuntimePackageVersion>
|
||||
<MicrosoftBuildLocalizationPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildLocalizationPackageVersion>
|
||||
|
@ -45,6 +45,7 @@
|
|||
<NuGetPackagingPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetPackagingPackageVersion>
|
||||
<NuGetProjectModelPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetProjectModelPackageVersion>
|
||||
<NuGetVersioningPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetVersioningPackageVersion>
|
||||
<NuGetSdkResolverPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetSdkResolverPackageVersion>
|
||||
<MicrosoftNETTestSdkPackageVersion>15.8.0-preview-20180510-03</MicrosoftNETTestSdkPackageVersion>
|
||||
<MicrosoftTestPlatformCLIPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformCLIPackageVersion>
|
||||
<MicrosoftTestPlatformBuildPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformBuildPackageVersion>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
// Import the utility functionality.
|
||||
|
||||
import jobs.generation.ArchivalSettings;
|
||||
import jobs.generation.Utilities;
|
||||
|
||||
def project = GithubProject
|
||||
|
@ -108,6 +109,12 @@ set DOTNET_CLI_UI_LANGUAGE=es
|
|||
Utilities.addMSTestResults(newJob, '**/*.trx')
|
||||
}
|
||||
Utilities.addGithubPRTriggerForBranch(newJob, branch, "${os} ${architecture} ${configuration} Build")
|
||||
|
||||
def archiveSettings = new ArchivalSettings()
|
||||
archiveSettings.addFiles("test/**/*.trx")
|
||||
archiveSettings.setFailIfNothingArchived()
|
||||
archiveSettings.setArchiveOnFailure()
|
||||
Utilities.addArchival(newJob, archiveSettings)
|
||||
}
|
||||
|
||||
// Make the call to generate the help job
|
||||
|
|
7
scripts/obtain/dotnet-install.ps1
vendored
7
scripts/obtain/dotnet-install.ps1
vendored
|
@ -522,6 +522,7 @@ else {
|
|||
throw "Invalid value for `$Runtime"
|
||||
}
|
||||
|
||||
# Check if the SDK version is already installed.
|
||||
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
|
||||
if ($isAssetInstalled) {
|
||||
Say "$assetName version $SpecificVersion is already installed."
|
||||
|
@ -561,6 +562,12 @@ catch {
|
|||
Say "Extracting zip from $DownloadLink"
|
||||
Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
|
||||
|
||||
# Check if the SDK version is now installed; if not, fail the installation.
|
||||
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
|
||||
if (!$isAssetInstalled) {
|
||||
throw "$assetName version $SpecificVersion failed to install with an unknown error."
|
||||
}
|
||||
|
||||
Remove-Item $ZipPath
|
||||
|
||||
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
|
||||
|
|
7
scripts/obtain/dotnet-install.sh
vendored
7
scripts/obtain/dotnet-install.sh
vendored
|
@ -754,6 +754,7 @@ install_dotnet() {
|
|||
return 1
|
||||
fi
|
||||
|
||||
# Check if the SDK version is already installed.
|
||||
if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
|
||||
say "$asset_name version $specific_version is already installed."
|
||||
return 0
|
||||
|
@ -791,6 +792,12 @@ install_dotnet() {
|
|||
say "Extracting zip from $download_link"
|
||||
extract_dotnet_package "$zip_path" "$install_root"
|
||||
|
||||
# Check if the SDK version is now installed; if not, fail the installation.
|
||||
if ! is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
|
||||
say_err "$asset_name version $specific_version failed to install with an unknown error."
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.DotNet.Cli.Utils
|
||||
|
@ -47,5 +48,35 @@ namespace Microsoft.DotNet.Cli.Utils
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run Directory.Move and File.Move in Windows has a chance to get IOException with
|
||||
/// HResult 0x80070005 due to Indexer. But this error is transient.
|
||||
/// </summary>
|
||||
internal static void RetryOnMoveAccessFailure(Action action)
|
||||
{
|
||||
const int ERROR_HRESULT_ACCESS_DENIED = unchecked((int)0x80070005);
|
||||
int nextWaitTime = 10;
|
||||
int remainRetry = 10;
|
||||
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
break;
|
||||
}
|
||||
catch (IOException e) when (e.HResult == ERROR_HRESULT_ACCESS_DENIED)
|
||||
{
|
||||
Thread.Sleep(nextWaitTime);
|
||||
nextWaitTime *= 2;
|
||||
remainRetry--;
|
||||
if (remainRetry == 0)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
namespace Microsoft.DotNet.Configurer
|
||||
{
|
||||
public class DotnetFirstRunConfiguration
|
||||
{
|
||||
public bool GenerateAspNetCertificate { get; }
|
||||
|
||||
public bool PrintTelemetryMessage { get; }
|
||||
|
||||
public bool SkipFirstRunExperience { get; }
|
||||
|
||||
public DotnetFirstRunConfiguration(
|
||||
bool generateAspNetCertificate,
|
||||
bool printTelemetryMessage,
|
||||
bool skipFirstRunExperience)
|
||||
{
|
||||
GenerateAspNetCertificate = generateAspNetCertificate;
|
||||
PrintTelemetryMessage = printTelemetryMessage;
|
||||
SkipFirstRunExperience = skipFirstRunExperience;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@ namespace Microsoft.DotNet.Configurer
|
|||
public class DotnetFirstTimeUseConfigurer
|
||||
{
|
||||
private IReporter _reporter;
|
||||
private IEnvironmentProvider _environmentProvider;
|
||||
private DotnetFirstRunConfiguration _dotnetFirstRunConfiguration;
|
||||
private INuGetCachePrimer _nugetCachePrimer;
|
||||
private INuGetCacheSentinel _nugetCacheSentinel;
|
||||
private IFirstTimeUseNoticeSentinel _firstTimeUseNoticeSentinel;
|
||||
|
@ -29,7 +29,7 @@ namespace Microsoft.DotNet.Configurer
|
|||
IAspNetCertificateSentinel aspNetCertificateSentinel,
|
||||
IAspNetCoreCertificateGenerator aspNetCoreCertificateGenerator,
|
||||
IFileSentinel toolPathSentinel,
|
||||
IEnvironmentProvider environmentProvider,
|
||||
DotnetFirstRunConfiguration dotnetFirstRunConfiguration,
|
||||
IReporter reporter,
|
||||
string cliFallbackFolderPath,
|
||||
IEnvironmentPath pathAdder)
|
||||
|
@ -40,7 +40,7 @@ namespace Microsoft.DotNet.Configurer
|
|||
_aspNetCertificateSentinel = aspNetCertificateSentinel;
|
||||
_aspNetCoreCertificateGenerator = aspNetCoreCertificateGenerator;
|
||||
_toolPathSentinel = toolPathSentinel;
|
||||
_environmentProvider = environmentProvider;
|
||||
_dotnetFirstRunConfiguration = dotnetFirstRunConfiguration;
|
||||
_reporter = reporter;
|
||||
_cliFallbackFolderPath = cliFallbackFolderPath;
|
||||
_pathAdder = pathAdder ?? throw new ArgumentNullException(nameof(pathAdder));
|
||||
|
@ -93,11 +93,8 @@ namespace Microsoft.DotNet.Configurer
|
|||
#if EXCLUDE_ASPNETCORE
|
||||
return false;
|
||||
#else
|
||||
var generateAspNetCertificate =
|
||||
_environmentProvider.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true);
|
||||
|
||||
return ShouldRunFirstRunExperience() &&
|
||||
generateAspNetCertificate &&
|
||||
_dotnetFirstRunConfiguration.GenerateAspNetCertificate &&
|
||||
!_aspNetCertificateSentinel.Exists();
|
||||
#endif
|
||||
}
|
||||
|
@ -116,11 +113,8 @@ namespace Microsoft.DotNet.Configurer
|
|||
|
||||
private bool ShouldPrintFirstTimeUseNotice()
|
||||
{
|
||||
var showFirstTimeUseNotice =
|
||||
_environmentProvider.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true);
|
||||
|
||||
return ShouldRunFirstRunExperience() &&
|
||||
showFirstTimeUseNotice &&
|
||||
_dotnetFirstRunConfiguration.PrintTelemetryMessage &&
|
||||
!_firstTimeUseNoticeSentinel.Exists();
|
||||
}
|
||||
|
||||
|
@ -157,10 +151,7 @@ namespace Microsoft.DotNet.Configurer
|
|||
|
||||
private bool ShouldRunFirstRunExperience()
|
||||
{
|
||||
var skipFirstTimeExperience =
|
||||
_environmentProvider.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false);
|
||||
|
||||
return !skipFirstTimeExperience;
|
||||
return !_dotnetFirstRunConfiguration.SkipFirstRunExperience;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -141,6 +141,15 @@ namespace Microsoft.DotNet.Cli
|
|||
command = "help";
|
||||
}
|
||||
|
||||
var environmentProvider = new EnvironmentProvider();
|
||||
|
||||
bool generateAspNetCertificate =
|
||||
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true);
|
||||
bool printTelemetryMessage =
|
||||
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true);
|
||||
bool skipFirstRunExperience =
|
||||
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false);
|
||||
|
||||
topLevelCommandParserResult = new TopLevelCommandParserResult(command);
|
||||
var hasSuperUserAccess = false;
|
||||
if (IsDotnetBeingInvokedFromNativeInstaller(topLevelCommandParserResult))
|
||||
|
@ -149,15 +158,26 @@ namespace Microsoft.DotNet.Cli
|
|||
firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel();
|
||||
toolPathSentinel = new NoOpFileSentinel(exists: false);
|
||||
hasSuperUserAccess = true;
|
||||
|
||||
// When running through a native installer, we want the cache expansion to happen, so
|
||||
// we need to override this.
|
||||
skipFirstRunExperience = false;
|
||||
}
|
||||
|
||||
var dotnetFirstRunConfiguration = new DotnetFirstRunConfiguration(
|
||||
generateAspNetCertificate,
|
||||
printTelemetryMessage,
|
||||
skipFirstRunExperience);
|
||||
|
||||
ConfigureDotNetForFirstTimeUse(
|
||||
nugetCacheSentinel,
|
||||
firstTimeUseNoticeSentinel,
|
||||
aspNetCertificateSentinel,
|
||||
toolPathSentinel,
|
||||
cliFallbackFolderPathCalculator,
|
||||
hasSuperUserAccess);
|
||||
hasSuperUserAccess,
|
||||
dotnetFirstRunConfiguration,
|
||||
environmentProvider);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -222,15 +242,17 @@ namespace Microsoft.DotNet.Cli
|
|||
IAspNetCertificateSentinel aspNetCertificateSentinel,
|
||||
IFileSentinel toolPathSentinel,
|
||||
CliFolderPathCalculator cliFolderPathCalculator,
|
||||
bool hasSuperUserAccess)
|
||||
bool hasSuperUserAccess,
|
||||
DotnetFirstRunConfiguration dotnetFirstRunConfiguration,
|
||||
IEnvironmentProvider environmentProvider)
|
||||
{
|
||||
var environmentProvider = new EnvironmentProvider();
|
||||
|
||||
using (PerfTrace.Current.CaptureTiming())
|
||||
{
|
||||
var nugetPackagesArchiver = new NuGetPackagesArchiver();
|
||||
var environmentPath =
|
||||
EnvironmentPathFactory.CreateEnvironmentPath(cliFolderPathCalculator, hasSuperUserAccess, environmentProvider);
|
||||
var environmentPath = EnvironmentPathFactory.CreateEnvironmentPath(
|
||||
cliFolderPathCalculator,
|
||||
hasSuperUserAccess,
|
||||
environmentProvider);
|
||||
var commandFactory = new DotNetCommandFactory(alwaysRunOutOfProc: true);
|
||||
var nugetCachePrimer = new NuGetCachePrimer(
|
||||
nugetPackagesArchiver,
|
||||
|
@ -244,7 +266,7 @@ namespace Microsoft.DotNet.Cli
|
|||
aspNetCertificateSentinel,
|
||||
aspnetCertificateGenerator,
|
||||
toolPathSentinel,
|
||||
environmentProvider,
|
||||
dotnetFirstRunConfiguration,
|
||||
Reporter.Output,
|
||||
cliFolderPathCalculator.CliFallbackFolderPath,
|
||||
environmentPath);
|
||||
|
|
|
@ -113,7 +113,7 @@ namespace Microsoft.DotNet.ShellShim
|
|||
foreach (var file in GetShimFiles(commandName).Where(f => _fileSystem.File.Exists(f.Value)))
|
||||
{
|
||||
var tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||
_fileSystem.File.Move(file.Value, tempPath);
|
||||
FileAccessRetrier.RetryOnMoveAccessFailure(() => _fileSystem.File.Move(file.Value, tempPath));
|
||||
files[file.Value] = tempPath;
|
||||
}
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ namespace Microsoft.DotNet.ShellShim
|
|||
rollback: () => {
|
||||
foreach (var kvp in files)
|
||||
{
|
||||
_fileSystem.File.Move(kvp.Value, kvp.Key);
|
||||
FileAccessRetrier.RetryOnMoveAccessFailure(() => _fileSystem.File.Move(kvp.Value, kvp.Key));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using Microsoft.DotNet.Cli;
|
||||
using Microsoft.DotNet.Cli.Utils;
|
||||
using Microsoft.DotNet.Configurer;
|
||||
using Microsoft.DotNet.Tools;
|
||||
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||
|
@ -82,7 +83,7 @@ namespace Microsoft.DotNet.ToolPackage
|
|||
}
|
||||
|
||||
Directory.CreateDirectory(packageRootDirectory.Value);
|
||||
Directory.Move(stageDirectory.Value, packageDirectory.Value);
|
||||
FileAccessRetrier.RetryOnMoveAccessFailure(() => Directory.Move(stageDirectory.Value, packageDirectory.Value));
|
||||
rollbackDirectory = packageDirectory.Value;
|
||||
|
||||
return new ToolPackageInstance(_store, packageId, version, packageDirectory);
|
||||
|
|
|
@ -8,6 +8,7 @@ using Microsoft.Extensions.EnvironmentAbstractions;
|
|||
using NuGet.ProjectModel;
|
||||
using NuGet.Versioning;
|
||||
using Microsoft.DotNet.Cli.Utils;
|
||||
using System.Threading;
|
||||
|
||||
namespace Microsoft.DotNet.ToolPackage
|
||||
{
|
||||
|
@ -79,7 +80,7 @@ namespace Microsoft.DotNet.ToolPackage
|
|||
// Use the staging directory for uninstall
|
||||
// This prevents cross-device moves when temp is mounted to a different device
|
||||
var tempPath = _store.GetRandomStagingDirectory().Value;
|
||||
Directory.Move(PackageDirectory.Value, tempPath);
|
||||
FileAccessRetrier.RetryOnMoveAccessFailure(() => Directory.Move(PackageDirectory.Value, tempPath));
|
||||
tempPackageDirectory = tempPath;
|
||||
}
|
||||
|
||||
|
@ -111,7 +112,7 @@ namespace Microsoft.DotNet.ToolPackage
|
|||
if (tempPackageDirectory != null)
|
||||
{
|
||||
Directory.CreateDirectory(rootDirectory.Value);
|
||||
Directory.Move(tempPackageDirectory, PackageDirectory.Value);
|
||||
FileAccessRetrier.RetryOnMoveAccessFailure(() => Directory.Move(tempPackageDirectory, PackageDirectory.Value));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NETCore.App" Version="$(MicrosoftNETCoreAppPackageVersion)" />
|
||||
<PackageReference Include="NuGet.Build.Tasks" Version="$(NuGetBuildTasksPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.Build.NuGetSdkResolver" Version="$(NuGetSdkResolverPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.TestPlatform.CLI" Version="$(MicrosoftTestPlatformCLIPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.TestPlatform.Build" Version="$(MicrosoftTestPlatformBuildPackageVersion)" />
|
||||
<PackageReference Condition=" '$(DotNetBuildFromSource)' != 'true' " Include="NuGet.Localization" Version="$(NuGetProjectModelPackageVersion)" />
|
||||
|
@ -283,6 +284,9 @@
|
|||
<RemainingFiles Remove="$(PublishDir)**\*.resources.dll" />
|
||||
|
||||
<DiasymReaderPath Include="$(SharedFrameworkNameVersionPath)/Microsoft.DiaSymReader.Native.*.dll" />
|
||||
|
||||
<!-- MSBuild includes reference assemblies to compile in-memory tasks. Don't try to crossgen. -->
|
||||
<RemainingFiles Remove="$(PublishDir)ref\*.dll" />
|
||||
</ItemGroup>
|
||||
|
||||
<AddMetadataIsPE Items="@(RoslynFiles)">
|
||||
|
|
|
@ -21,7 +21,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
private Mock<IAspNetCertificateSentinel> _aspNetCertificateSentinelMock;
|
||||
private Mock<IAspNetCoreCertificateGenerator> _aspNetCoreCertificateGeneratorMock;
|
||||
private Mock<IFileSentinel> _toolPathSentinelMock;
|
||||
private Mock<IEnvironmentProvider> _environmentProviderMock;
|
||||
private Mock<IReporter> _reporterMock;
|
||||
private Mock<IEnvironmentPath> _pathAdderMock;
|
||||
|
||||
|
@ -33,16 +32,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock = new Mock<IAspNetCertificateSentinel>();
|
||||
_aspNetCoreCertificateGeneratorMock = new Mock<IAspNetCoreCertificateGenerator>();
|
||||
_toolPathSentinelMock = new Mock<IFileSentinel>();
|
||||
_environmentProviderMock = new Mock<IEnvironmentProvider>();
|
||||
_reporterMock = new Mock<IReporter>();
|
||||
_pathAdderMock = new Mock<IEnvironmentPath>();
|
||||
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
|
||||
.Returns(false);
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true))
|
||||
.Returns(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -57,7 +48,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -72,9 +68,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
public void It_does_not_print_the_first_time_use_notice_when_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environemnt_variable()
|
||||
{
|
||||
_firstTimeUseNoticeSentinelMock.Setup(n => n.Exists()).Returns(false);
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
|
||||
.Returns(true);
|
||||
|
||||
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||
_nugetCachePrimerMock.Object,
|
||||
|
@ -83,7 +76,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: true
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -98,9 +96,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
public void It_does_not_print_the_first_time_use_notice_when_the_user_has_set_the_DOTNET_PRINT_TELEMETRY_MESSAGE_environemnt_variable()
|
||||
{
|
||||
_firstTimeUseNoticeSentinelMock.Setup(n => n.Exists()).Returns(false);
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true))
|
||||
.Returns(false);
|
||||
|
||||
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||
_nugetCachePrimerMock.Object,
|
||||
|
@ -109,7 +104,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: false,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -132,7 +132,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -155,7 +160,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -177,7 +187,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -199,7 +214,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -210,12 +230,9 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void It_does_not_prime_the_cache_if_the_sentinel_exists_but_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environemnt_variable()
|
||||
public void It_does_not_prime_the_cache_if_the_sentinel_does_not_exist_but_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environment_variable()
|
||||
{
|
||||
_nugetCacheSentinelMock.Setup(n => n.Exists()).Returns(false);
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
|
||||
.Returns(true);
|
||||
|
||||
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||
_nugetCachePrimerMock.Object,
|
||||
|
@ -224,7 +241,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: true
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -246,7 +268,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -269,7 +296,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -295,7 +327,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -322,7 +359,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -345,7 +387,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -368,7 +415,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -398,7 +450,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -420,7 +477,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -435,9 +497,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
public void It_does_not_generate_the_aspnet_https_development_certificate_when_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environment_variable()
|
||||
{
|
||||
_aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false);
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
|
||||
.Returns(true);
|
||||
|
||||
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||
_nugetCachePrimerMock.Object,
|
||||
|
@ -446,7 +505,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: true
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -461,9 +525,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
public void It_does_not_generate_the_aspnet_https_development_certificate_when_the_user_has_set_the_DOTNET_GENERATE_ASPNET_CERTIFICATE_environment_variable()
|
||||
{
|
||||
_aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false);
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true))
|
||||
.Returns(false);
|
||||
|
||||
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||
_nugetCachePrimerMock.Object,
|
||||
|
@ -472,7 +533,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: false,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -487,8 +553,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
public void It_generates_the_aspnet_https_development_certificate_if_the_sentinel_does_not_exist()
|
||||
{
|
||||
_aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false);
|
||||
_environmentProviderMock.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true))
|
||||
.Returns(true);
|
||||
|
||||
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||
_nugetCachePrimerMock.Object,
|
||||
|
@ -497,7 +561,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -520,7 +589,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: false
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
@ -533,10 +607,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
[Fact]
|
||||
public void It_does_not_add_the_tool_path_to_the_environment_if_the_first_run_experience_is_skipped()
|
||||
{
|
||||
_environmentProviderMock
|
||||
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
|
||||
.Returns(true);
|
||||
|
||||
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
|
||||
_nugetCachePrimerMock.Object,
|
||||
_nugetCacheSentinelMock.Object,
|
||||
|
@ -544,7 +614,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
|||
_aspNetCertificateSentinelMock.Object,
|
||||
_aspNetCoreCertificateGeneratorMock.Object,
|
||||
_toolPathSentinelMock.Object,
|
||||
_environmentProviderMock.Object,
|
||||
new DotnetFirstRunConfiguration
|
||||
(
|
||||
generateAspNetCertificate: true,
|
||||
printTelemetryMessage: true,
|
||||
skipFirstRunExperience: true
|
||||
),
|
||||
_reporterMock.Object,
|
||||
CliFallbackFolderPath,
|
||||
_pathAdderMock.Object);
|
||||
|
|
|
@ -334,19 +334,34 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
|
|||
private sealed class MockFactory : SdkResultFactory
|
||||
{
|
||||
public override SdkResult IndicateFailure(IEnumerable<string> errors, IEnumerable<string> warnings = null)
|
||||
=> new MockResult { Success = false, Errors = errors, Warnings = warnings };
|
||||
=> new MockResult(success: false, path: null, version: null, warnings: warnings, errors: errors);
|
||||
|
||||
public override SdkResult IndicateSuccess(string path, string version, IEnumerable<string> warnings = null)
|
||||
=> new MockResult { Success = true, Path = path, Version = version, Warnings = warnings };
|
||||
=> new MockResult(success: true, path: path, version: version, warnings: warnings);
|
||||
}
|
||||
|
||||
private sealed class MockResult : SdkResult
|
||||
{
|
||||
public new bool Success { get => base.Success; set => base.Success = value; }
|
||||
public string Version { get; set; }
|
||||
public string Path { get; set; }
|
||||
public IEnumerable<string> Errors { get; set; }
|
||||
public IEnumerable<string> Warnings { get; set; }
|
||||
public MockResult(bool success, string path, string version, IEnumerable<string> warnings = null,
|
||||
IEnumerable<string> errors = null)
|
||||
{
|
||||
Success = success;
|
||||
Path = path;
|
||||
Version = version;
|
||||
Warnings = warnings;
|
||||
Errors = errors;
|
||||
}
|
||||
|
||||
public new bool Success
|
||||
{
|
||||
get => base.Success;
|
||||
private set => base.Success = value;
|
||||
}
|
||||
|
||||
public override string Version { get; protected set; }
|
||||
public override string Path { get; protected set; }
|
||||
public IEnumerable<string> Errors { get; }
|
||||
public IEnumerable<string> Warnings { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,4 @@
|
|||
<ProjectReference Include="..\..\src\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NETStandard.Library" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
Loading…
Reference in a new issue