<SQLitePCLRawbundle_greenVersion>2.0.4</SQLitePCLRawbundle_greenVersion>
<MoqVersion>4.12.0</MoqVersion>
<FsCheckVersion>2.14.3</FsCheckVersion>
- <SdkVersionForWorkloadTesting>7.0.100-alpha.1.21528.1</SdkVersionForWorkloadTesting>
+ <SdkVersionForWorkloadTesting>7.0.100-preview.3.22151.18</SdkVersionForWorkloadTesting>
<CompilerPlatformTestingVersion>1.1.1-beta1.22103.1</CompilerPlatformTestingVersion>
<!-- Docs -->
<MicrosoftPrivateIntellisenseVersion>6.0.0-preview-20220104.1</MicrosoftPrivateIntellisenseVersion>
- src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/*
- src/mono/mono/*
- eng/testing/scenarios/BuildWasmAppsJobsList.txt
+ - eng/testing/workloads-testing.targets
- eng/Version.Details.xml
+ - eng/Versions.props
- src/mono/wasm/emscripten-version.txt
- subset: wasmdebuggertests
include:
<_ShellCommandSeparator Condition="'$(OS)' == 'Windows_NT'">&&</_ShellCommandSeparator>
<_ShellCommandSeparator Condition="'$(OS)' != 'Windows_NT'">&&</_ShellCommandSeparator>
<_WasmMainJSFileName Condition="'$(WasmMainJSPath)' != ''">$([System.IO.Path]::GetFileName('$(WasmMainJSPath)'))</_WasmMainJSFileName>
+ <_WasmStrictVersionMatch Condition="'$(ContinuousIntegrationBuild)' == 'true'">true</_WasmStrictVersionMatch>
<XUnitUseRandomizedTestOrderer Condition="'$(XUnitUseRandomizedTestOrderer)' == '' and '$(IsTestProject)' == 'true'">true</XUnitUseRandomizedTestOrderer>
</PropertyGroup>
<_WasmPropertyNames Include="WasmNativeStrip" />
<_WasmPropertyNames Include="WasmEnableES6" />
<_WasmPropertyNames Include="_WasmDevel" />
+ <_WasmPropertyNames Include="_WasmStrictVersionMatch" />
<_WasmPropertyNames Include="WasmEmitSymbolMap" />
<_WasmPropertiesToPass
</ItemGroup>
<PropertyGroup>
<ActualEmccVersionRaw>%(_ReversedVersionLines.Identity)</ActualEmccVersionRaw>
+ <_VersionMismatchMessage>Emscripten version mismatch. The runtime pack in $(MicrosoftNetCoreAppRuntimePackDir) expects '$(RuntimeEmccVersionRaw)', but emcc being used has version '$(ActualEmccVersionRaw)'. This might cause build failures.</_VersionMismatchMessage>
</PropertyGroup>
- <Warning Condition="'$(RuntimeEmccVersionRaw)' != '$(ActualEmccVersionRaw)'"
- Text="Emscripten version mismatch. The runtime pack in $(MicrosoftNetCoreAppRuntimePackDir) expects '$(RuntimeEmccVersionRaw)', but emcc being used has version '$(ActualEmccVersionRaw)'. This might cause build failures." />
+ <Warning Condition="'$(RuntimeEmccVersionRaw)' != '$(ActualEmccVersionRaw)' and '$(_WasmStrictVersionMatch)' != 'true'"
+ Text="$(_VersionMismatchMessage)" />
+ <Error Condition="'$(RuntimeEmccVersionRaw)' != '$(ActualEmccVersionRaw)' and '$(_WasmStrictVersionMatch)' == 'true'"
+ Text="$(_VersionMismatchMessage)" />
</Target>
<!--
string id = $"blz_no_aot_{config}";
CreateBlazorWasmTemplateProject(id);
- BlazorBuild(id, config, NativeFilesType.FromRuntimePack);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack));
if (config == "Release")
{
// relinking in publish for Release config
- BlazorPublish(id, config, NativeFilesType.Relinked);
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
}
else
{
- BlazorPublish(id, config, NativeFilesType.FromRuntimePack);
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack));
}
}
AddItemsPropertiesToProject(projectFile, extraProperties: "<RunAOTCompilation>true</RunAOTCompilation>");
// No relinking, no AOT
- BlazorBuild(id, config, NativeFilesType.FromRuntimePack);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack));
// will aot
- BlazorPublish(id, config, NativeFilesType.AOT);
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.AOT));
// build again
- BlazorBuild(id, config, NativeFilesType.FromRuntimePack);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack));
}
[ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))]
}
// Check that we linked only for publish
- string objBuildDir = Path.Combine(_projectDir!, "obj", config, "net6.0", "wasm", "for-build");
+ string objBuildDir = Path.Combine(_projectDir!, "obj", config, DefaultTargetFramework, "wasm", "for-build");
Assert.False(Directory.Exists(objBuildDir), $"Found unexpected {objBuildDir}, which gets creating when relinking during Build");
// double check!
//CreateBlazorWasmTemplateProject(id);
//// No relinking, no AOT
- //BlazorBuild(id, config, NativeFilesType.FromRuntimePack);
+ //BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack);
//// AOT=true only for the publish command line, similar to what
//// would happen when setting it in Publish dialog for VS
- //BlazorPublish(id, config, expectedFileType: NativeFilesType.AOT, "-p:RunAOTCompilation=true");
+ //BlazorPublish(new BlazorBuildOptions(id, config, expectedFileType: NativeFilesType.AOT, "-p:RunAOTCompilation=true");
//// publish again, no AOT
- //BlazorPublish(id, config, NativeFilesType.Relinked);
+ //BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.Relinked);
//}
[ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))]
string projectFile = CreateProjectWithNativeReference(id);
AddItemsPropertiesToProject(projectFile, extraProperties: "<RunAOTCompilation>true</RunAOTCompilation>");
- BlazorBuild(id, config, expectedFileType: NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
- BlazorPublish(id, config, expectedFileType: NativeFilesType.AOT);
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.AOT));
// will relink
- BlazorBuild(id, config, expectedFileType: NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
}
[ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))]
string id = $"blz_nativeref_aot_{config}";
CreateProjectWithNativeReference(id);
- BlazorBuild(id, config, expectedFileType: NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
- BlazorPublish(id, config, expectedFileType: NativeFilesType.AOT, "-p:RunAOTCompilation=true");
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.AOT), "-p:RunAOTCompilation=true");
// no aot!
- BlazorPublish(id, config, expectedFileType: NativeFilesType.Relinked);
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
}
[ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))]
AddItemsPropertiesToProject(projectFile, extraItems: @"<NativeFileReference Include=""mylib.cpp"" />");
- BlazorBuild(id, config, expectedFileType: NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
CheckNativeFileLinked(forPublish: false);
- BlazorPublish(id, config, expectedFileType: NativeFilesType.Relinked);
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
CheckNativeFileLinked(forPublish: true);
void CheckNativeFileLinked(bool forPublish)
{
// very crude way to check that the native file was linked in
// needed because we don't run the blazor app yet
- string objBuildDir = Path.Combine(_projectDir!, "obj", config, "net6.0", "wasm", forPublish ? "for-publish" : "for-build");
+ string objBuildDir = Path.Combine(_projectDir!, "obj", config, DefaultTargetFramework, "wasm", forPublish ? "for-publish" : "for-build");
string pinvokeTableHPath = Path.Combine(objBuildDir, "pinvoke-table.h");
Assert.True(File.Exists(pinvokeTableHPath), $"Could not find {pinvokeTableHPath}");
_projectDir = wasmProjectDir;
string config = "Release";
// No relinking, no AOT
- BlazorBuild(id, config, NativeFilesType.FromRuntimePack);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack));
// will relink
- BlazorPublish(id, config, NativeFilesType.Relinked);
+ BlazorPublish(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
// publish/wwwroot/_framework/blazor.boot.json
string frameworkDir = FindBlazorBinFrameworkDir(config, forPublish: true);
EnvVars["DOTNET_INSTALL_DIR"] = sdkForWorkloadPath;
EnvVars["DOTNET_MULTILEVEL_LOOKUP"] = "0";
EnvVars["DOTNET_SKIP_FIRST_TIME_EXPERIENCE"] = "1";
+ EnvVars["_WasmStrictVersionMatch"] = "true";
EnvVars["MSBuildSDKsPath"] = string.Empty;
EnvVars["PATH"] = $"{sdkForWorkloadPath}{Path.PathSeparator}{Environment.GetEnvironmentVariable("PATH")}";
{
public abstract class BuildTestBase : IClassFixture<SharedBuildPerTestClassFixture>, IDisposable
{
- protected const string s_targetFramework = "net6.0";
+ public const string DefaultTargetFramework = "net7.0";
+ public static readonly string NuGetConfigFileNameForDefaultFramework = $"nuget7.config";
protected static readonly bool s_skipProjectCleanup;
protected static readonly string s_xharnessRunnerCommand;
protected string? _projectDir;
int expectedExitCode = 0,
string? args = null,
Dictionary<string, string>? envVars = null,
- string targetFramework = "net6.0")
+ string targetFramework = DefaultTargetFramework)
{
buildDir ??= _projectDir;
envVars ??= new();
File.WriteAllText(Path.Combine(dir, "Directory.Build.props"), s_buildEnv.DirectoryBuildPropsContents);
File.WriteAllText(Path.Combine(dir, "Directory.Build.targets"), s_buildEnv.DirectoryBuildTargetsContents);
- File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "nuget6.config"), Path.Combine(dir, "nuget.config"));
+ File.Copy(Path.Combine(BuildEnvironment.TestDataPath, NuGetConfigFileNameForDefaultFramework), Path.Combine(dir, "nuget.config"));
Directory.CreateDirectory(Path.Combine(dir, ".nuget"));
}
protected const string SimpleProjectTemplate =
@$"<Project Sdk=""Microsoft.NET.Sdk"">
<PropertyGroup>
- <TargetFramework>{s_targetFramework}</TargetFramework>
+ <TargetFramework>{DefaultTargetFramework}</TargetFramework>
<OutputType>Exe</OutputType>
<WasmGenerateRunV8Script>true</WasmGenerateRunV8Script>
<WasmMainJSPath>test-main.js</WasmMainJSPath>
if (options.ExpectSuccess)
{
- string bundleDir = Path.Combine(GetBinDir(config: buildArgs.Config, targetFramework: options.TargetFramework ?? "net6.0"), "AppBundle");
+ string bundleDir = Path.Combine(GetBinDir(config: buildArgs.Config, targetFramework: options.TargetFramework ?? DefaultTargetFramework), "AppBundle");
AssertBasicAppBundle(bundleDir, buildArgs.ProjectName, buildArgs.Config, options.MainJS ?? "test-main.js", options.HasV8Script, options.HasIcudt, options.DotnetWasmFromRuntimePack ?? !buildArgs.AOT);
}
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, NuGetConfigFileNameForDefaultFramework), 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"));
}
return Path.Combine(_projectDir!, $"{id}.csproj");
}
- protected (CommandResult, string) BlazorBuild(string id, string config, NativeFilesType expectedFileType, params string[] extraArgs)
+ protected (CommandResult, string) BlazorBuild(BlazorBuildOptions options, params string[] extraArgs)
{
- var res = BuildInternal(id, config, publish: false, extraArgs);
- AssertDotNetNativeFiles(expectedFileType, config, forPublish: false);
- AssertBlazorBundle(config, isPublish: false, dotnetWasmFromRuntimePack: expectedFileType == NativeFilesType.FromRuntimePack);
+ var res = BuildInternal(options.Id, options.Config, publish: false, extraArgs);
+ AssertDotNetNativeFiles(options.ExpectedFileType, options.Config, forPublish: false, targetFramework: options.TargetFramework);
+ AssertBlazorBundle(options.Config, isPublish: false, dotnetWasmFromRuntimePack: options.ExpectedFileType == NativeFilesType.FromRuntimePack);
return res;
}
- protected (CommandResult, string) BlazorPublish(string id, string config, NativeFilesType expectedFileType, params string[] extraArgs)
+ protected (CommandResult, string) BlazorPublish(BlazorBuildOptions options, params string[] extraArgs)
{
- var res = BuildInternal(id, config, publish: true, extraArgs);
- AssertDotNetNativeFiles(expectedFileType, config, forPublish: true);
- AssertBlazorBundle(config, isPublish: true, dotnetWasmFromRuntimePack: expectedFileType == NativeFilesType.FromRuntimePack);
+ var res = BuildInternal(options.Id, options.Config, publish: true, extraArgs);
+ AssertDotNetNativeFiles(options.ExpectedFileType, options.Config, forPublish: true, targetFramework: options.TargetFramework);
+ AssertBlazorBundle(options.Config, isPublish: true, dotnetWasmFromRuntimePack: options.ExpectedFileType == NativeFilesType.FromRuntimePack);
- if (expectedFileType == NativeFilesType.AOT)
+ if (options.ExpectedFileType == NativeFilesType.AOT)
{
// check for this too, so we know the format is correct for the negative
// test for jsinterop.webassembly.dll
return (res, logPath);
}
- protected void AssertDotNetNativeFiles(NativeFilesType type, string config, bool forPublish)
+ protected void AssertDotNetNativeFiles(NativeFilesType type, string config, bool forPublish, string targetFramework = DefaultTargetFramework)
{
string label = forPublish ? "publish" : "build";
- string objBuildDir = Path.Combine(_projectDir!, "obj", config, "net6.0", "wasm", forPublish ? "for-publish" : "for-build");
+ string objBuildDir = Path.Combine(_projectDir!, "obj", config, targetFramework, "wasm", forPublish ? "for-publish" : "for-build");
string binFrameworkDir = FindBlazorBinFrameworkDir(config, forPublish);
string srcDir = type switch
$"{msgPrefix} Could not find dotnet.*js in {bootJson}");
}
- protected string FindBlazorBinFrameworkDir(string config, bool forPublish, string framework="net6.0")
+ protected string FindBlazorBinFrameworkDir(string config, bool forPublish, string framework = DefaultTargetFramework)
{
string basePath = Path.Combine(_projectDir!, "bin", config, framework);
if (forPublish)
return first ?? Path.Combine(parentDir, dirName);
}
- protected string GetBinDir(string config, string targetFramework=s_targetFramework, string? baseDir=null)
+ protected string GetBinDir(string config, string targetFramework=DefaultTargetFramework, string? baseDir=null)
{
var dir = baseDir ?? _projectDir;
Assert.NotNull(dir);
return Path.Combine(dir!, "bin", config, targetFramework, "browser-wasm");
}
- protected string GetObjDir(string config, string targetFramework=s_targetFramework, string? baseDir=null)
+ protected string GetObjDir(string config, string targetFramework=DefaultTargetFramework, string? baseDir=null)
{
var dir = baseDir ?? _projectDir;
Assert.NotNull(dir);
string? TargetFramework = null,
string? MainJS = null
);
+
+ public record BlazorBuildOptions
+ (
+ string Id,
+ string Config,
+ NativeFilesType ExpectedFileType,
+ string TargetFramework = BuildTestBase.DefaultTargetFramework
+ );
}
<WasmBuildNative>true</WasmBuildNative>";
AddItemsPropertiesToProject(projectFile, extraProperties: extraProperties);
- BlazorBuild(id, config, NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
- string relinkDir = Path.Combine(_projectDir!, "obj", config, "net6.0", "wasm", "for-build");
+ string relinkDir = Path.Combine(_projectDir!, "obj", config, DefaultTargetFramework, "wasm", "for-build");
Assert.True(Directory.Exists(relinkDir), $"Could not find expected relink dir: {relinkDir}");
string logPath = Path.Combine(s_buildEnv.LogRootPath, id, $"{id}-clean.binlog");
BuildInternal(id, config, publish: false,
extraArgs: relink ? "-p:WasmBuildNative=true" : string.Empty);
- string relinkDir = Path.Combine(_projectDir!, "obj", config, "net6.0", "wasm", "for-build");
+ string relinkDir = Path.Combine(_projectDir!, "obj", config, DefaultTargetFramework, "wasm", "for-build");
if (relink)
Assert.True(Directory.Exists(relinkDir), $"Could not find expected relink dir: {relinkDir}");
string projectFile = CreateBlazorWasmTemplateProject(id);
AddItemsPropertiesToProject(projectFile, extraProperties: "<WasmBuildNative>true</WasmBuildNative>");
- string objDir = Path.Combine(_projectDir!, "obj", config, "net6.0", "wasm");
+ string objDir = Path.Combine(_projectDir!, "obj", config, DefaultTargetFramework, "wasm");
- BlazorBuild(id, config, NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
File.Move(Path.Combine(s_buildEnv.LogRootPath, id, $"{id}-build.binlog"),
Path.Combine(s_buildEnv.LogRootPath, id, $"{id}-build-first.binlog"));
var originalStat = StatFiles(pathsDict.Select(kvp => kvp.Value.fullPath));
// build again
- BlazorBuild(id, config, NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
var newStat = StatFiles(pathsDict.Select(kvp => kvp.Value.fullPath));
CompareStat(originalStat, newStat, pathsDict.Values);
string projectFile = CreateBlazorWasmTemplateProject(id);
AddItemsPropertiesToProject(projectFile, extraProperties: "<WasmBuildNative>true</WasmBuildNative>");
- string objDir = Path.Combine(_projectDir!, "obj", config, "net6.0", "wasm");
+ string objDir = Path.Combine(_projectDir!, "obj", config, DefaultTargetFramework, "wasm");
- BlazorBuild(id, config, NativeFilesType.Relinked);
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked));
File.Move(Path.Combine(s_buildEnv.LogRootPath, id, $"{id}-build.binlog"),
Path.Combine(s_buildEnv.LogRootPath, id, $"{id}-build-first.binlog"));
var originalStat = StatFiles(pathsDict.Select(kvp => kvp.Value.fullPath));
// build again
- BlazorBuild(id, config, NativeFilesType.Relinked, "-p:EmccLinkOptimizationFlag=-O1");
+ BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.Relinked), "-p:EmccLinkOptimizationFlag=-O1");
var newStat = StatFiles(pathsDict.Select(kvp => kvp.Value.fullPath));
CompareStat(originalStat, newStat, pathsDict.Values);
private const string s_resourcesProjectTemplate =
@$"<Project Sdk=""Microsoft.NET.Sdk"">
<PropertyGroup>
- <TargetFramework>{s_targetFramework}</TargetFramework>
+ <TargetFramework>{DefaultTargetFramework}</TargetFramework>
<OutputType>Exe</OutputType>
<WasmGenerateRunV8Script>true</WasmGenerateRunV8Script>
<WasmMainJSPath>test-main.js</WasmMainJSPath>
</fallbackPackageFolders>
<packageSources>
<clear />
- <add key="dotnet6" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json" />
+ <add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
<disabledPackageSources>