diff --git a/eng/Versions.props b/eng/Versions.props
index b7e3c660f4cdd3..f05d832e6bccdf 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -164,7 +164,7 @@
2.0.4
4.12.0
2.14.3
- 6.0.100-rc.1.21412.8
+ 6.0.100-rc.2.21425.12
5.0.0-preview-20201009.2
diff --git a/src/libraries/Directory.Build.props b/src/libraries/Directory.Build.props
index e81806e83421f2..0be101164991b0 100644
--- a/src/libraries/Directory.Build.props
+++ b/src/libraries/Directory.Build.props
@@ -138,7 +138,7 @@
$([MSBuild]::NormalizeDirectory($(SdkWithNoWorkloadForTestingPath)))
$(SdkWithNoWorkloadForTestingPath)version-$(SdkVersionForWorkloadTesting).stamp
- $(SdkWithWorkloadForTestingPath)workload.stamp
+ $(SdkWithNoWorkloadForTestingPath)workload.stamp
$(ArtifactsBinDir)dotnet-workload\
$([MSBuild]::NormalizeDirectory($(SdkWithWorkloadForTestingPath)))
diff --git a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.targets.in b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.targets.in
index d9a9dc2a72d463..9b13301584dc5d 100644
--- a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.targets.in
+++ b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.targets.in
@@ -7,13 +7,9 @@
!$([MSBuild]::VersionGreaterThanOrEquals('$(TargetFrameworkVersion)', '6.0'))">true
-
- <_NativeBuildNeeded Condition="'$(RunAOTCompilation)' == 'true'">true
- WebAssembly workloads (required for AOT) are only supported for projects targeting net6.0+
-
-
- true
+
+ true
$(WasmNativeWorkload)
@@ -128,7 +124,21 @@
/>
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs
index 2059142de09715..9b7709098ed929 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs
@@ -26,27 +26,17 @@ public BlazorWasmTests(ITestOutputHelper output, SharedBuildPerTestClassFixture
[InlineData("Release", true)]
public void PublishTemplateProject(string config, bool aot)
{
- string id = $"blazorwasm_{config}_aot_{aot}";
- InitPaths(id);
- if (Directory.Exists(_projectDir))
- Directory.Delete(_projectDir, recursive: true);
- Directory.CreateDirectory(_projectDir);
- Directory.CreateDirectory(Path.Combine(_projectDir, ".nuget"));
-
- File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "nuget6.config"), Path.Combine(_projectDir, "nuget.config"));
- File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "Blazor.Directory.Build.props"), Path.Combine(_projectDir, "Directory.Build.props"));
- File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "Blazor.Directory.Build.targets"), Path.Combine(_projectDir, "Directory.Build.targets"));
-
- string logPath = Path.Combine(s_buildEnv.LogRootPath, id);
+ string id = $"blazorwasm_{config}_aot_{aot}_{Path.GetRandomFileName()}";
+ InitBlazorWasmProjectDir(id);
new DotNetCommand(s_buildEnv, useDefaultArgs: false)
- .WithWorkingDirectory(_projectDir)
+ .WithWorkingDirectory(_projectDir!)
.ExecuteWithCapturedOutput("new blazorwasm")
.EnsureSuccessful();
- string publishLogPath = Path.Combine(logPath, $"{id}.binlog");
+ string publishLogPath = Path.Combine(s_buildEnv.LogRootPath, id, $"{id}.binlog");
new DotNetCommand(s_buildEnv)
- .WithWorkingDirectory(_projectDir)
+ .WithWorkingDirectory(_projectDir!)
.ExecuteWithCapturedOutput("publish", $"-bl:{publishLogPath}", aot ? "-p:RunAOTCompilation=true" : "", $"-p:Configuration={config}")
.EnsureSuccessful();
@@ -57,6 +47,76 @@ public void PublishTemplateProject(string config, bool aot)
// playwright?
}
+ [ConditionalTheory(typeof(BuildTestBase), nameof(IsNotUsingWorkloads))]
+ [InlineData("Debug")]
+ [InlineData("Release")]
+ public void NativeRef_EmitsWarningBecauseItRequiresWorkload(string config)
+ {
+ CommandResult res = PublishForRequiresWorkloadTest(config, extraItems: "");
+ res.EnsureSuccessful();
+
+ Assert.Contains("but the native references won't be linked in", res.Output);
+ }
+
+ [ConditionalTheory(typeof(BuildTestBase), nameof(IsNotUsingWorkloads))]
+ [InlineData("Debug")]
+ [InlineData("Release")]
+ public void AOT_FailsBecauseItRequiresWorkload(string config)
+ {
+ CommandResult res = PublishForRequiresWorkloadTest(config, extraProperties: "true");
+ Assert.NotEqual(0, res.ExitCode);
+ Assert.Contains("following workloads must be installed: wasm-tools", res.Output);
+ }
+
+ [ConditionalTheory(typeof(BuildTestBase), nameof(IsNotUsingWorkloads))]
+ [InlineData("Debug")]
+ [InlineData("Release")]
+ public void AOT_And_NativeRef_FailsBecauseItRequireWorkload(string config)
+ {
+ CommandResult res = PublishForRequiresWorkloadTest(config,
+ extraProperties: "true",
+ extraItems: "");
+
+ Assert.NotEqual(0, res.ExitCode);
+ Assert.Contains("following workloads must be installed: wasm-tools", res.Output);
+ }
+
+ private CommandResult PublishForRequiresWorkloadTest(string config, string extraItems="", string extraProperties="")
+ {
+ string id = $"needs_workload_{config}_{Path.GetRandomFileName()}";
+ InitBlazorWasmProjectDir(id);
+
+ new DotNetCommand(s_buildEnv, useDefaultArgs: false)
+ .WithWorkingDirectory(_projectDir!)
+ .ExecuteWithCapturedOutput("new blazorwasm")
+ .EnsureSuccessful();
+
+ if (IsNotUsingWorkloads)
+ {
+ // no packs installed, so no need to update the paths for runtime pack etc
+ File.WriteAllText(Path.Combine(_projectDir!, "Directory.Build.props"), "");
+ File.WriteAllText(Path.Combine(_projectDir!, "Directory.Build.targets"), "");
+ }
+
+ AddItemsPropertiesToProject(Path.Combine(_projectDir!, $"{id}.csproj"),
+ extraProperties: extraProperties,
+ extraItems: extraItems);
+
+ string publishLogPath = Path.Combine(s_buildEnv.LogRootPath, id, $"{id}.binlog");
+ return new DotNetCommand(s_buildEnv)
+ .WithWorkingDirectory(_projectDir!)
+ .ExecuteWithCapturedOutput("publish",
+ $"-bl:{publishLogPath}",
+ $"-p:Configuration={config}",
+ "-p:MSBuildEnableWorkloadResolver=true"); // WasmApp.LocalBuild.* disables this, but it is needed for this test
+ }
+
+ [Theory]
+ [InlineData("Debug")]
+ [InlineData("Release")]
+ public void Net50Projects_NativeReference(string config)
+ => BuildNet50Project(config, aot: false, expectError: true, @"");
+
public static TheoryData Net50TestData = new()
{
{ "Debug", /*aot*/ true, /*expectError*/ true },
@@ -65,24 +125,15 @@ public void PublishTemplateProject(string config, bool aot)
{ "Release", /*aot*/ false, /*expectError*/ false }
};
- [ConditionalTheory(typeof(BuildTestBase), nameof(IsNotUsingWorkloads))]
+ [Theory]
[MemberData(nameof(Net50TestData))]
- public void Net50ProjectsWithNoPacksInstalled(string config, bool aot, bool expectError)
- => BuildNet50Project(config, aot, expectError);
+ public void Net50Projects_AOT(string config, bool aot, bool expectError)
+ => BuildNet50Project(config, aot: aot, expectError: expectError);
- [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))]
- [MemberData(nameof(Net50TestData))]
- public void Net50ProjectsWithPacksInstalled(string config, bool aot, bool expectError)
- => BuildNet50Project(config, aot, expectError);
-
- private void BuildNet50Project(string config, bool aot, bool errorExpected)
+ private void BuildNet50Project(string config, bool aot, bool expectError, string? extraItems=null)
{
- string id = $"Blazor_net50_{config}_{aot}";
- InitPaths(id);
- if (Directory.Exists(_projectDir))
- Directory.Delete(_projectDir, recursive: true);
- Directory.CreateDirectory(_projectDir);
- Directory.CreateDirectory(Path.Combine(_projectDir, ".nuget"));
+ string id = $"Blazor_net50_{config}_{aot}_{Path.GetRandomFileName()}";
+ InitBlazorWasmProjectDir(id);
string directoryBuildTargets = @"
@@ -90,26 +141,27 @@ private void BuildNet50Project(string config, bool aot, bool errorExpected)
";
- File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "nuget6.config"), Path.Combine(_projectDir, "nuget.config"));
- File.WriteAllText(Path.Combine(_projectDir, "Directory.Build.props"), "");
- File.WriteAllText(Path.Combine(_projectDir, "Directory.Build.targets"), directoryBuildTargets);
+ File.WriteAllText(Path.Combine(_projectDir!, "Directory.Build.props"), "");
+ File.WriteAllText(Path.Combine(_projectDir!, "Directory.Build.targets"), directoryBuildTargets);
string logPath = Path.Combine(s_buildEnv.LogRootPath, id);
Utils.DirectoryCopy(Path.Combine(BuildEnvironment.TestAssetsPath, "Blazor_net50"), Path.Combine(_projectDir!));
+ string projectFile = Path.Combine(_projectDir!, "Blazor_net50.csproj");
+ AddItemsPropertiesToProject(projectFile, extraItems: extraItems);
+
string publishLogPath = Path.Combine(logPath, $"{id}.binlog");
CommandResult result = new DotNetCommand(s_buildEnv)
- .WithWorkingDirectory(_projectDir)
- .ExecuteWithCapturedOutput("publish",
- $"-bl:{publishLogPath}",
- (aot ? "-p:RunAOTCompilation=true" : ""),
- $"-p:Configuration={config}");
+ .WithWorkingDirectory(_projectDir!)
+ .ExecuteWithCapturedOutput("publish",
+ $"-bl:{publishLogPath}",
+ (aot ? "-p:RunAOTCompilation=true" : ""),
+ $"-p:Configuration={config}");
- if (errorExpected)
+ if (expectError)
{
result.EnsureExitCode(1);
- Assert.Contains("** UsingBrowserRuntimeWorkload: 'false'", result.Output);
- Assert.Contains("error : WebAssembly workloads (required for AOT) are only supported for projects targeting net6.0+", result.Output);
+ Assert.Contains("are only supported for projects targeting net6.0+", result.Output);
}
else
{
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
index 3cd21151a07859..50425f9844cb8c 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
@@ -11,6 +11,7 @@
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
+using System.Xml;
using Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;
@@ -357,6 +358,19 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp
}
}
+ public void InitBlazorWasmProjectDir(string id)
+ {
+ InitPaths(id);
+ if (Directory.Exists(_projectDir))
+ Directory.Delete(_projectDir, recursive: true);
+ Directory.CreateDirectory(_projectDir);
+ Directory.CreateDirectory(Path.Combine(_projectDir, ".nuget"));
+
+ File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "nuget6.config"), Path.Combine(_projectDir, "nuget.config"));
+ File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "Blazor.Directory.Build.props"), Path.Combine(_projectDir, "Directory.Build.props"));
+ File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "Blazor.Directory.Build.targets"), Path.Combine(_projectDir, "Directory.Build.targets"));
+ }
+
static void AssertRuntimePackPath(string buildOutput)
{
var match = s_runtimePackPathRegex.Match(buildOutput);
@@ -601,6 +615,33 @@ void LogData(string label, string? message)
}
}
+ public static string AddItemsPropertiesToProject(string projectFile, string? extraProperties=null, string? extraItems=null)
+ {
+ if (extraProperties == null && extraItems == null)
+ return projectFile;
+
+ XmlDocument doc = new();
+ doc.Load(projectFile);
+
+ if (extraItems != null)
+ {
+ XmlNode node = doc.CreateNode(XmlNodeType.Element, "ItemGroup", null);
+ node.InnerXml = extraItems;
+ doc.DocumentElement!.AppendChild(node);
+ }
+
+ if (extraProperties != null)
+ {
+ XmlNode node = doc.CreateNode(XmlNodeType.Element, "PropertyGroup", null);
+ node.InnerXml = extraProperties;
+ doc.DocumentElement!.AppendChild(node);
+ }
+
+ doc.Save(projectFile);
+
+ return projectFile;
+ }
+
public void Dispose()
{
if (_projectDir != null && _enablePerTestCleanup)
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeLibraryTests.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeLibraryTests.cs
index e06c099b19c4bf..eb306286ba5e0d 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeLibraryTests.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeLibraryTests.cs
@@ -17,7 +17,7 @@ public NativeLibraryTests(ITestOutputHelper output, SharedBuildPerTestClassFixtu
{
}
- [Theory]
+ [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))]
[BuildAndRun(aot: false)]
[BuildAndRun(aot: true)]
public void ProjectWithNativeReference(BuildArgs buildArgs, RunHost host, string id)
@@ -48,7 +48,7 @@ public void ProjectWithNativeReference(BuildArgs buildArgs, RunHost host, string
Assert.Contains("from pinvoke: 142", output);
}
- [Theory]
+ [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))]
[BuildAndRun(aot: false)]
[BuildAndRun(aot: true)]
public void ProjectUsingSkiaSharp(BuildArgs buildArgs, RunHost host, string id)