diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index dadff82e2183..2a7617e6e8f6 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -45,9 +45,9 @@
https://github.com/dotnet/fsharp
66042d33b998a180edbd99af6064da85f8977bf3
-
+
https://github.com/dotnet/roslyn
- 598796cd274b852b5be35398133516e19f543744
+ f96dcbb6597fcc801970ee09688e733b64ce9040
https://github.com/dotnet/aspnetcore
diff --git a/eng/Versions.props b/eng/Versions.props
index da4819e3bc73..61f0a490b154 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -111,7 +111,7 @@
- 3.7.0-5.20365.2
+ 3.7.0-5.20367.1
diff --git a/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstRunConfiguration.cs b/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstRunConfiguration.cs
index f45b6adf6a4e..0e621828db4c 100644
--- a/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstRunConfiguration.cs
+++ b/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstRunConfiguration.cs
@@ -8,16 +8,21 @@ public class DotnetFirstRunConfiguration
public bool GenerateAspNetCertificate { get; }
public bool TelemetryOptout { get; }
+
public bool AddGlobalToolsToPath { get; }
+ public bool NoLogo { get; }
+
public DotnetFirstRunConfiguration(
bool generateAspNetCertificate,
bool telemetryOptout,
- bool addGlobalToolsToPath)
+ bool addGlobalToolsToPath,
+ bool nologo)
{
GenerateAspNetCertificate = generateAspNetCertificate;
TelemetryOptout = telemetryOptout;
AddGlobalToolsToPath = addGlobalToolsToPath;
+ NoLogo = nologo;
}
}
}
diff --git a/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstTimeUseConfigurer.cs b/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstTimeUseConfigurer.cs
index c299d57de994..bfa1b09d455b 100644
--- a/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstTimeUseConfigurer.cs
+++ b/src/Cli/Microsoft.DotNet.Configurer/DotnetFirstTimeUseConfigurer.cs
@@ -50,13 +50,17 @@ public void Configure()
if (ShouldPrintFirstTimeUseNotice())
{
- PrintFirstTimeMessageWelcome();
- if (ShouldPrintTelemetryMessageWhenFirstTimeUseNoticeIsEnabled())
+ if (!_dotnetFirstRunConfiguration.NoLogo)
{
- PrintTelemetryMessage();
+ PrintFirstTimeMessageWelcome();
+ if (ShouldPrintTelemetryMessageWhenFirstTimeUseNoticeIsEnabled())
+ {
+ PrintTelemetryMessage();
+ }
+
+ PrintFirstTimeMessageMoreInformation();
}
- PrintFirstTimeMessageMoreInformation();
_firstTimeUseNoticeSentinel.CreateIfNotExists();
}
diff --git a/src/Cli/dotnet/Program.cs b/src/Cli/dotnet/Program.cs
index 2f7a7133b528..e4b1f369102c 100644
--- a/src/Cli/dotnet/Program.cs
+++ b/src/Cli/dotnet/Program.cs
@@ -148,6 +148,8 @@ internal static int ProcessArgs(string[] args, ITelemetry telemetryClient = null
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_CLI_TELEMETRY_OPTOUT", defaultValue: false);
bool addGlobalToolsToPath =
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_ADD_GLOBAL_TOOLS_TO_PATH", defaultValue: true);
+ bool nologo =
+ environmentProvider.GetEnvironmentVariableAsBool("DOTNET_NOLOGO", defaultValue: false);
ReportDotnetHomeUsage(environmentProvider);
@@ -158,13 +160,14 @@ internal static int ProcessArgs(string[] args, ITelemetry telemetryClient = null
aspNetCertificateSentinel = new NoOpAspNetCertificateSentinel();
firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel();
toolPathSentinel = new NoOpFileSentinel(exists: false);
- isDotnetBeingInvokedFromNativeInstaller = true;
+ isDotnetBeingInvokedFromNativeInstaller = true;
}
var dotnetFirstRunConfiguration = new DotnetFirstRunConfiguration(
generateAspNetCertificate: generateAspNetCertificate,
telemetryOptout: telemetryOptout,
- addGlobalToolsToPath: addGlobalToolsToPath);
+ addGlobalToolsToPath: addGlobalToolsToPath,
+ nologo: nologo);
ConfigureDotNetForFirstTimeUse(
firstTimeUseNoticeSentinel,
diff --git a/src/Cli/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs b/src/Cli/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs
index bd9b0aecaced..38b809738e64 100644
--- a/src/Cli/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs
+++ b/src/Cli/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs
@@ -54,7 +54,8 @@ public static Command NuGet() =>
Create.Option("-d|--disable-buffering", Parser.CompletionOnlyDescription),
Create.Option("-n|--no-symbols", Parser.CompletionOnlyDescription),
Create.Option("--no-service-endpoint", Parser.CompletionOnlyDescription),
- Create.Option("--interactive", Parser.CompletionOnlyDescription)
+ Create.Option("--interactive", Parser.CompletionOnlyDescription),
+ Create.Option("--skip-duplicate", Parser.CompletionOnlyDescription)
));
}
}
diff --git a/src/Layout/redist/minimumMSBuildVersion b/src/Layout/redist/minimumMSBuildVersion
index 28ebe8b4dbed..2e4239c31313 100644
--- a/src/Layout/redist/minimumMSBuildVersion
+++ b/src/Layout/redist/minimumMSBuildVersion
@@ -1 +1 @@
-16.5.0
+16.7.0
diff --git a/src/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj b/src/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj
index 892eb0dafa0b..e543d26c8d17 100644
--- a/src/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj
+++ b/src/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj
@@ -8,6 +8,8 @@
true
MicrosoftAspNetCore
true
+
+ true
diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets
index cb0d6cbffdf1..66f66638f869 100644
--- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets
+++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets
@@ -450,6 +450,7 @@ Copyright (c) .NET Foundation. All rights reserved.
_ComputeResolvedFilesToPublishTypes
Splits ResolvedFileToPublish items into 'PreserveNewest' and 'Always' buckets.
+ Then further splits those into 'Unbundled' buckets based on the single file setting.
============================================================
-->
@@ -461,6 +462,19 @@ Copyright (c) .NET Foundation. All rights reserved.
<_ResolvedFileToPublishAlways Include="@(ResolvedFileToPublish)"
Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='Always'" />
+
+
+
+ <_ResolvedUnbundledFileToPublishPreserveNewest
+ Include="@(_ResolvedFileToPublishPreserveNewest)"
+ Condition="'$(PublishSingleFile)' != 'true' or
+ '%(_ResolvedFileToPublishPreserveNewest.ExcludeFromSingleFile)'=='true'" />
+
+ <_ResolvedUnbundledFileToPublishAlways
+ Include="@(_ResolvedFileToPublishAlways)"
+ Condition="'$(PublishSingleFile)' != 'true' or
+ '%(_ResolvedFileToPublishAlways.ExcludeFromSingleFile)'=='true'" />
+
- @(ReferenceComWrappersToCopyLocal->'%(Filename)%(Extension)')
+ %(Filename)%(Extension)
PreserveNewest
@@ -1112,7 +1126,7 @@ Copyright (c) .NET Foundation. All rights reserved.
============================================================
ComputeFilesCopiedToPublishDir
- Gathers all the files that were copied to the publish directory. This is used by wapproj and is required for back compat.
+ Gathers all the files that will be copied to the publish directory. This is used by wapproj and is required for back compat.
============================================================
-->
p.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", It.IsAny()))
- .Returns(DOTNET_GENERATE_ASPNET_CERTIFICATE);
+ .Setup(p => p.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", It.IsAny()))
+ .Returns(DOTNET_GENERATE_ASPNET_CERTIFICATE);
_environmentProvider
.Setup(p => p.GetEnvironmentVariableAsBool("DOTNET_CLI_TELEMETRY_OPTOUT", It.IsAny()))
.Returns(DOTNET_CLI_TELEMETRY_OPTOUT);
+ _environmentProvider
+ .Setup(p => p.GetEnvironmentVariableAsBool("DOTNET_NOLOGO", It.IsAny()))
+ .Returns(DOTNET_NOLOGO);
_environmentProvider
.Setup(p => p.GetEnvironmentVariableAsBool("DOTNET_ADD_GLOBAL_TOOLS_TO_PATH", It.IsAny()))
.Returns(true);
@@ -206,6 +218,8 @@ private Telemetry RunConfigUsingMocks(bool isInstallerRun)
_environmentProviderObject.GetEnvironmentVariableAsBool("DOTNET_CLI_TELEMETRY_OPTOUT", false);
bool addGlobalToolsToPath =
_environmentProviderObject.GetEnvironmentVariableAsBool("DOTNET_ADD_GLOBAL_TOOLS_TO_PATH", defaultValue: true);
+ bool nologo =
+ _environmentProviderObject.GetEnvironmentVariableAsBool("DOTNET_NOLOGO", defaultValue: false);
IAspNetCertificateSentinel aspNetCertificateSentinel;
IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel;
@@ -233,7 +247,8 @@ private Telemetry RunConfigUsingMocks(bool isInstallerRun)
(
generateAspNetCertificate: generateAspNetCertificate,
telemetryOptout: telemetryOptout,
- addGlobalToolsToPath: addGlobalToolsToPath
+ addGlobalToolsToPath: addGlobalToolsToPath,
+ nologo: nologo
),
reporter: _reporterMock,
cliFallbackFolderPath: CliFallbackFolderPath,
diff --git a/src/Tests/Microsoft.NET.Build.Tests/COMReferenceTests.cs b/src/Tests/Microsoft.NET.Build.Tests/COMReferenceTests.cs
index 7e61b6162e81..b64769c78fa2 100644
--- a/src/Tests/Microsoft.NET.Build.Tests/COMReferenceTests.cs
+++ b/src/Tests/Microsoft.NET.Build.Tests/COMReferenceTests.cs
@@ -19,60 +19,44 @@ public COMReferenceTests(ITestOutputHelper log) : base(log)
{
}
- [FullMSBuildOnlyTheory(Skip ="Too much dependency on build machine state.")]
+ [FullMSBuildOnlyTheory()]
[InlineData(true)]
[InlineData(false)]
public void COMReferenceBuildsAndRuns(bool embedInteropTypes)
{
var targetFramework = "netcoreapp3.0";
-
var testProject = new TestProject
{
- Name = "UseMediaPlayer",
+ Name = "UseComReferences",
IsSdkProject = true,
TargetFrameworks = targetFramework,
IsExe = true,
SourceFiles =
{
["Program.cs"] = @"
- using MediaPlayer;
class Program
{
static void Main(string[] args)
{
- var mediaPlayer = (IMediaPlayer2)new MediaPlayerClass();
+ System.Console.WriteLine(typeof(VSLangProj.VSProject));
}
}
",
}
};
- if (embedInteropTypes)
- {
- testProject.SourceFiles.Add("MediaPlayerClass.cs", @"
- using System.Runtime.InteropServices;
- namespace MediaPlayer
- {
- [ComImport]
- [Guid(""22D6F312-B0F6-11D0-94AB-0080C74C7E95"")]
- class MediaPlayerClass { }
- }
- ");
- }
-
var reference = new XElement("ItemGroup",
new XElement("COMReference",
- new XAttribute("Include", "MediaPlayer.dll"),
- new XElement("Guid", "22d6f304-b0f6-11d0-94ab-0080c74c7e95"),
- new XElement("VersionMajor", "1"),
+ new XAttribute("Include", "VSLangProj.dll"),
+ new XElement("Guid", "49a1950e-3e35-4595-8cb9-920c64c44d67"),
+ new XElement("VersionMajor", "7"),
new XElement("VersionMinor", "0"),
new XElement("WrapperTool", "tlbimp"),
new XElement("Lcid", "0"),
new XElement("Isolated", "false"),
new XElement("EmbedInteropTypes", embedInteropTypes)));
-
var testAsset = _testAssetsManager
.CreateTestProject(testProject, identifier: embedInteropTypes.ToString())
.WithProjectChanges(doc => doc.Root.Add(reference));
@@ -81,8 +65,79 @@ class MediaPlayerClass { }
buildCommand.Execute().Should().Pass();
var outputDirectory = buildCommand.GetOutputDirectory(targetFramework);
- var runCommand = new RunExeCommand(Log, outputDirectory.File("UseMediaPlayer.exe").FullName);
+ var runCommand = new RunExeCommand(Log, outputDirectory.File("UseComReferences.exe").FullName);
runCommand.Execute().Should().Pass();
}
+
+ [FullMSBuildOnlyFact]
+ public void COMReferenceProperlyPublish()
+ {
+ var targetFramework = "netcoreapp3.0";
+
+ var testProject = new TestProject
+ {
+ Name = "MultiComReference",
+ IsSdkProject = true,
+ TargetFrameworks = targetFramework,
+ IsExe = true,
+ SourceFiles =
+ {
+ ["Program.cs"] = @"
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ }
+ }
+ "
+ }
+ };
+
+ var vslangProj70ComRef = "VSLangProj.dll";
+ var reference1 = new XElement("ItemGroup",
+ new XElement("COMReference",
+ new XAttribute("Include", vslangProj70ComRef),
+ new XElement("Guid", "49a1950e-3e35-4595-8cb9-920c64c44d67"),
+ new XElement("VersionMajor", "7"),
+ new XElement("VersionMinor", "0"),
+ new XElement("WrapperTool", "tlbimp"),
+ new XElement("Lcid", "0"),
+ new XElement("Isolated", "false"),
+ new XElement("EmbedInteropTypes", "false")));
+
+ var vslangProj80ComRef = "VSLangProj80.dll";
+ var reference2 = new XElement("ItemGroup",
+ new XElement("COMReference",
+ new XAttribute("Include", vslangProj80ComRef),
+ new XElement("Guid", "307953c0-7973-490a-a4a7-25999e023be8"),
+ new XElement("VersionMajor", "8"),
+ new XElement("VersionMinor", "0"),
+ new XElement("WrapperTool", "tlbimp"),
+ new XElement("Lcid", "0"),
+ new XElement("Isolated", "false"),
+ new XElement("EmbedInteropTypes", "false")));
+
+ var testAsset = _testAssetsManager
+ .CreateTestProject(testProject)
+ .WithProjectChanges(doc => doc.Root.Add(new[] { reference1, reference2 }));
+
+ var buildCommand = new BuildCommand(Log, Path.Combine(testAsset.TestRoot, testProject.Name));
+ buildCommand.Execute().Should().Pass();
+
+ var outputDirectory = buildCommand.GetOutputDirectory(targetFramework);
+
+ // COM References by default adds the 'Interop.' prefix.
+ Assert.True(outputDirectory.File($"Interop.{vslangProj70ComRef}").Exists);
+ Assert.True(outputDirectory.File($"Interop.{vslangProj80ComRef}").Exists);
+
+ var publishCommand = new PublishCommand(Log, Path.Combine(testAsset.TestRoot, testProject.Name));
+ publishCommand.Execute().Should().Pass();
+
+ outputDirectory = publishCommand.GetOutputDirectory(targetFramework);
+
+ // COM References by default adds the 'Interop.' prefix.
+ Assert.True(outputDirectory.File($"Interop.{vslangProj70ComRef}").Exists);
+ Assert.True(outputDirectory.File($"Interop.{vslangProj80ComRef}").Exists);
+ }
}
}
diff --git a/src/Tests/dotnet.Tests/CommandTests/CompleteCommandTests.cs b/src/Tests/dotnet.Tests/CommandTests/CompleteCommandTests.cs
index f5632991930b..b01b7f1dfea2 100644
--- a/src/Tests/dotnet.Tests/CommandTests/CompleteCommandTests.cs
+++ b/src/Tests/dotnet.Tests/CommandTests/CompleteCommandTests.cs
@@ -184,6 +184,7 @@ public void GivenNuGetPushCommandItDisplaysCompletions()
"--help",
"--no-service-endpoint",
"--no-symbols",
+ "--skip-duplicate",
"--source",
"--symbol-api-key",
"--symbol-source",