diff --git a/eng/testing/workloads-testing.targets b/eng/testing/workloads-testing.targets
index 0c41fc2bb5c5c7..537fa502c57e18 100644
--- a/eng/testing/workloads-testing.targets
+++ b/eng/testing/workloads-testing.targets
@@ -3,7 +3,9 @@
   
     
     true
+  
 
+  
     <_SdkForWorkloadTestingBasePath>$(ArtifactsBinDir)
     <_SdkWithNoWorkloadPath>$([MSBuild]::NormalizeDirectory($(_SdkForWorkloadTestingBasePath), 'dotnet-none'))
     <_SdkWithNoWorkloadStampPath>$([MSBuild]::NormalizePath($(_SdkWithNoWorkloadPath), '.version-$(SdkVersionForWorkloadTesting).stamp'))
@@ -190,7 +192,7 @@
 
   
+          Outputs="@(_SdkWithWorkloadToInstall->'%(StampPath)');$(_SdkWithNoWorkloadStampPath)">
     
       <_BuiltNuGets Include="$(LibrariesShippingPackagesDir)\*.nupkg" />
     
@@ -205,5 +207,7 @@
                      TemplateNuGetConfigPath="$(RepoRoot)NuGet.config"
                      SdkWithNoWorkloadInstalledPath="$(_SdkWithNoWorkloadPath)"
       />
+
+    
   
 
diff --git a/src/libraries/sendtohelix-wasm.targets b/src/libraries/sendtohelix-wasm.targets
index acf037e988b272..82b14495dd5267 100644
--- a/src/libraries/sendtohelix-wasm.targets
+++ b/src/libraries/sendtohelix-wasm.targets
@@ -26,6 +26,7 @@
     $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'build'))
     $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'NetCoreServer', '$(Configuration)', '$(AspNetCoreAppCurrent)'))
     $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'RemoteLoopServer', '$(Configuration)', '$(AspNetCoreAppCurrent)'))
+    <_ShippingPackagesPath>$([MSBuild]::NormalizeDirectory($(ArtifactsDir), 'packages', $(Configuration), 'Shipping'))
     $(DebuggerHost)-
     $(Scenario)-
 
@@ -56,6 +57,7 @@
     true
     true
     true
+    true
 
     true
     false
@@ -121,6 +123,9 @@
   
     
     
+
+    
+    
   
 
   
@@ -187,6 +192,10 @@
       
       
     
+
+    
+      
+    
   
 
   
     
 
-    
+    
       <_MonoWorkloadTargetsMobile>true
       <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion6)
     
diff --git a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in
index 8063ce6554016e..c6b512e6c45165 100644
--- a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in
+++ b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in
@@ -94,7 +94,7 @@
         
     
 
-    
+    
       <_MonoWorkloadTargetsMobile>true
       <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion7)
     
diff --git a/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs b/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs
index 1e77d5905f5a9b..f4763c1b76115f 100644
--- a/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs
+++ b/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs
@@ -97,6 +97,8 @@ public override bool Execute()
 
                     if (!ExecuteInternal(req) && !req.IgnoreErrors)
                         return false;
+
+                    File.WriteAllText(req.StampPath, string.Empty);
                 }
 
                 return !Log.HasLoggedErrors;
@@ -399,6 +401,7 @@ internal sealed record InstallWorkloadRequest(
             public string ManifestName => Workload.GetMetadata("ManifestName");
             public string Version => Workload.GetMetadata("Version");
             public string TargetPath => Target.GetMetadata("InstallPath");
+            public string StampPath => Target.GetMetadata("StampPath");
             public bool IgnoreErrors => Workload.GetMetadata("IgnoreErrors").ToLowerInvariant() == "true";
             public string WorkloadId => Workload.ItemSpec;
 
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs
index f034d2fcc40a8f..8123c9cfc1c9ed 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs
@@ -21,7 +21,7 @@ public BlazorWasmBuildPublishTests(ITestOutputHelper output, SharedBuildPerTestC
             _enablePerTestCleanup = true;
         }
 
-        [Theory]
+        [Theory, TestCategory("no-workload")]
         [InlineData("Debug")]
         [InlineData("Release")]
         public void DefaultTemplate_WithoutWorkload(string config)
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs
index abe5e102bc686e..8ce212003ab122 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs
@@ -4,7 +4,6 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Reflection;
 using System.Runtime.InteropServices;
 
 #nullable enable
@@ -25,6 +24,7 @@ public class BuildEnvironment
         public string                           LogRootPath                   { get; init; }
 
         public string                           WorkloadPacksDir              { get; init; }
+        public string                           BuiltNuGetsPath               { get; init; }
 
         public static readonly string           RelativeTestAssetsPath = @"..\testassets\";
         public static readonly string           TestAssetsPath = Path.Combine(AppContext.BaseDirectory, "testassets");
@@ -99,6 +99,11 @@ public BuildEnvironment()
                 DirectoryBuildTargetsContents = s_directoryBuildTargetsForLocal;
             }
 
+            if (EnvironmentVariables.BuiltNuGetsPath is null || !Directory.Exists(EnvironmentVariables.BuiltNuGetsPath))
+                throw new Exception($"Cannot find 'BUILT_NUGETS_PATH={EnvironmentVariables.BuiltNuGetsPath}'");
+
+            BuiltNuGetsPath = EnvironmentVariables.BuiltNuGetsPath;
+
             // `runtime` repo's build environment sets these, and they
             // mess up the build for the test project, which is using a different
             // dotnet
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
index c2b64f790444bd..659075cc69d9d7 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
@@ -41,6 +41,7 @@ public abstract class BuildTestBase : IClassFixture");
+        }
+
         public string CreateWasmTemplateProject(string id, string template = "wasmbrowser")
         {
             InitPaths(id);
@@ -636,10 +660,10 @@ protected static void AssertFile(string file0, string file1, string? label=null,
         protected (int exitCode, string buildOutput) AssertBuild(string args, string label="build", bool expectSuccess=true, IDictionary? envVars=null, int? timeoutMs=null)
         {
             var result = RunProcess(s_buildEnv.DotNet, _testOutput, args, workingDir: _projectDir, label: label, envVars: envVars, timeoutMs: timeoutMs ?? s_defaultPerTestTimeoutMs);
-            if (expectSuccess)
-                Assert.True(0 == result.exitCode, $"Build process exited with non-zero exit code: {result.exitCode}");
-            else
-                Assert.True(0 != result.exitCode, $"Build should have failed, but it didn't. Process exited with exitCode : {result.exitCode}");
+            if (expectSuccess && result.exitCode != 0)
+                throw new XunitException($"Build process exited with non-zero exit code: {result.exitCode}");
+            if (!expectSuccess && result.exitCode == 0)
+                throw new XunitException($"Build should have failed, but it didn't. Process exited with exitCode : {result.exitCode}");
 
             return result;
         }
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs
index a2439797566848..87589af53f491b 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs
@@ -16,5 +16,7 @@ internal static class EnvironmentVariables
         internal static readonly string? TestLogPath               = Environment.GetEnvironmentVariable("TEST_LOG_PATH");
         internal static readonly string? SkipProjectCleanup        = Environment.GetEnvironmentVariable("SKIP_PROJECT_CLEANUP");
         internal static readonly string? XHarnessCliPath           = Environment.GetEnvironmentVariable("XHARNESS_CLI_PATH");
+        internal static readonly string? BuiltNuGetsPath           = Environment.GetEnvironmentVariable("BUILT_NUGETS_PATH");
+        internal static readonly string? BrowserPathForTests       = Environment.GetEnvironmentVariable("BROWSER_PATH_FOR_TESTS");
     }
 }
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj b/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj
index a56ba59191d845..8c7ad904c26ebd 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj
@@ -56,7 +56,7 @@
       
     
 
-    
+    
       <_XUnitTraitArg Condition="'$(TestUsingWorkloads)' == 'true'">-notrait category=no-workload
       <_XUnitTraitArg Condition="'$(TestUsingWorkloads)' != 'true'">-trait category=no-workload
     
@@ -69,6 +69,9 @@
 
       
       
+
+      
+      
     
 
     
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets
index b2b875fd8449ce..419a6d48046ba0 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets
@@ -3,7 +3,26 @@
       
   
 
-  
+  
+    
+
+    
     
+
+    
+    
+
+    
+    
+
+    
   
 
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config
index d6de05ad43dddc..e7ad45f78b8cab 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config
@@ -7,6 +7,7 @@
   
   
     
+