diff --git a/Roslyn.slnx b/Roslyn.slnx
index 37ddceaf8c1a9..67f950c52efe3 100644
--- a/Roslyn.slnx
+++ b/Roslyn.slnx
@@ -386,6 +386,7 @@
+
diff --git a/eng/config/PublishData.json b/eng/config/PublishData.json
index 67349715f2fe3..01148a7dc3f24 100644
--- a/eng/config/PublishData.json
+++ b/eng/config/PublishData.json
@@ -12,6 +12,7 @@
"Microsoft.CodeAnalysis.Scripting.Common": "arcade",
"Microsoft.CodeAnalysis.Workspaces.Common": "vssdk",
"Microsoft.CodeAnalysis.Workspaces.MSBuild": "arcade",
+ "Microsoft.CodeAnalysis.Workspaces.MSBuild.Contracts": "arcade",
"Microsoft.CodeAnalysis.Workspaces.Desktop": "arcade",
"Microsoft.CodeAnalysis.Workspaces.Test.Utilities": "vs-impl",
"Microsoft.CodeAnalysis.Compiler.Test.Resources": "vs-impl",
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/DotnetCliHelper.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/DotnetCliHelper.cs
index 8d03e0374cb5f..0fb187995edcb 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/DotnetCliHelper.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/DotnetCliHelper.cs
@@ -5,7 +5,6 @@
using System.Composition;
using System.Diagnostics;
using System.Text;
-using Microsoft.CodeAnalysis.Collections;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.Extensions.Logging;
using Roslyn.Utilities;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/CanonicalMiscFilesProjectLoader.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/CanonicalMiscFilesProjectLoader.cs
index 18dafdc7e3ae0..7453465742ce9 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/CanonicalMiscFilesProjectLoader.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/CanonicalMiscFilesProjectLoader.cs
@@ -7,7 +7,6 @@
using Microsoft.CodeAnalysis.Features.Workspaces;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.ProjectTelemetry;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.ProjectSystem;
using Microsoft.CodeAnalysis.Shared.Extensions;
@@ -17,7 +16,6 @@
using Microsoft.CodeAnalysis.Workspaces.ProjectSystem;
using Microsoft.Extensions.Logging;
using Roslyn.Utilities;
-using static Microsoft.CodeAnalysis.MSBuild.BuildHostProcessManager;
namespace Microsoft.CodeAnalysis.LanguageServer.FileBasedPrograms;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsProjectSystem.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsProjectSystem.cs
index afa8e5e4dde15..c40dfcd86b561 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsProjectSystem.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsProjectSystem.cs
@@ -2,12 +2,9 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System.Collections.Immutable;
-using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Features.Workspaces;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.ProjectTelemetry;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.ProjectSystem;
using Microsoft.CodeAnalysis.Shared.Extensions;
@@ -17,7 +14,6 @@
using Microsoft.CommonLanguageServerProtocol.Framework;
using Microsoft.Extensions.Logging;
using Roslyn.LanguageServer.Protocol;
-using static Microsoft.CodeAnalysis.MSBuild.BuildHostProcessManager;
namespace Microsoft.CodeAnalysis.LanguageServer.FileBasedPrograms;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsWorkspaceProviderFactory.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsWorkspaceProviderFactory.cs
index 69f3b965c7a41..17312862df4d3 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsWorkspaceProviderFactory.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/FileBasedProgramsWorkspaceProviderFactory.cs
@@ -8,7 +8,6 @@
using Microsoft.CodeAnalysis.LanguageServer.Handler;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.ProjectTelemetry;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.ProjectSystem;
using Microsoft.CodeAnalysis.Shared.TestHooks;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/VirtualProjectXmlProvider.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/VirtualProjectXmlProvider.cs
index 9c05bb948bcee..93e0f39c7b909 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/VirtualProjectXmlProvider.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/FileBasedPrograms/VirtualProjectXmlProvider.cs
@@ -13,7 +13,6 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
-using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
using Microsoft.CodeAnalysis.Options;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/GlobalUsings.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/GlobalUsings.cs
new file mode 100644
index 0000000000000..95a318dfeea30
--- /dev/null
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/GlobalUsings.cs
@@ -0,0 +1,9 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+extern alias MSBuildWorkspaces;
+extern alias MSBuildWorkspacesContracts;
+
+global using MSBuildWorkspaces::Microsoft.CodeAnalysis.MSBuild;
+global using MSBuildWorkspacesContracts::Microsoft.CodeAnalysis.MSBuild;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/BinLogPathProvider.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/BinLogPathProvider.cs
index 05958b1a0a796..0e0df7c168ba7 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/BinLogPathProvider.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/BinLogPathProvider.cs
@@ -4,7 +4,6 @@
using System.Composition;
using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Options;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.Composition;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectLoader.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectLoader.cs
index 7bbc4bdbb00f7..1cbdb4809236b 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectLoader.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectLoader.cs
@@ -6,21 +6,16 @@
using System.Diagnostics;
using Microsoft.CodeAnalysis.Collections;
using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.LanguageServer.Handler.DebugConfiguration;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.ProjectTelemetry;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.ProjectSystem;
-using Microsoft.CodeAnalysis.Shared.Collections;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Shared.TestHooks;
-using Microsoft.CodeAnalysis.Shared.Utilities;
using Microsoft.CodeAnalysis.Threading;
using Microsoft.CodeAnalysis.Workspaces.ProjectSystem;
using Microsoft.Extensions.Logging;
using Roslyn.Utilities;
-using static Microsoft.CodeAnalysis.MSBuild.BuildHostProcessManager;
using LSP = Roslyn.LanguageServer.Protocol;
namespace Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs
index a7b83343ac0fa..65d9dc77abf42 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs
@@ -6,15 +6,12 @@
using System.Composition;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.ProjectTelemetry;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.ProjectSystem;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Workspaces.ProjectSystem;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.Composition;
-using Roslyn.Utilities;
-using static Microsoft.CodeAnalysis.MSBuild.BuildHostProcessManager;
namespace Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
@@ -87,7 +84,7 @@ public async Task OpenProjectsAsync(ImmutableArray projectFilePaths)
if (!_projectFileExtensionRegistry.TryGetLanguageNameFromProjectPath(projectPath, DiagnosticReportingMode.Ignore, out var languageName))
return null;
- var preferredBuildHostKind = GetKindForProject(projectPath);
+ var preferredBuildHostKind = BuildHostProcessManager.GetKindForProject(projectPath);
var (buildHost, actualBuildHostKind) = await buildHostProcessManager.GetBuildHostWithFallbackAsync(preferredBuildHostKind, projectPath, cancellationToken);
var loadedFile = await buildHost.LoadProjectFileAsync(projectPath, languageName, cancellationToken);
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs
index b5236a94d0828..cce080e5590ca 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs
@@ -3,13 +3,8 @@
// See the LICENSE file in the project root for more information.
using System.Collections.Immutable;
-using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.LanguageServer.Handler.DebugConfiguration;
-using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.FileWatching;
-using Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.ProjectTelemetry;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.ProjectSystem;
-using Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis.Workspaces.ProjectSystem;
using Microsoft.Extensions.FileSystemGlobbing;
using Microsoft.Extensions.Logging;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectDependencyHelper.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectDependencyHelper.cs
index 1dd9ed1a80826..0311e437f410d 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectDependencyHelper.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectDependencyHelper.cs
@@ -5,7 +5,6 @@
using System.Collections.Immutable;
using Microsoft.CodeAnalysis.LanguageServer.Handler;
using Microsoft.CodeAnalysis.LanguageServer.LanguageServer;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.Extensions.Logging;
using NuGet.ProjectModel;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectTelemetry/ProjectLoadTelemetryReporter.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectTelemetry/ProjectLoadTelemetryReporter.cs
index 51ebd9b53b3cf..2e151f051a4af 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectTelemetry/ProjectLoadTelemetryReporter.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/ProjectTelemetry/ProjectLoadTelemetryReporter.cs
@@ -6,7 +6,6 @@
using System.Composition;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.LanguageServer.LanguageServer;
-using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.Extensions.Logging;
using Roslyn.Utilities;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/LanguageServer/Handler/Restore/RestoreParams.cs b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/LanguageServer/Handler/Restore/RestoreParams.cs
index d8d97b8f8a781..6027b517257ee 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/LanguageServer/Handler/Restore/RestoreParams.cs
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/LanguageServer/Handler/Restore/RestoreParams.cs
@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
using System.Text.Json.Serialization;
-using Roslyn.LanguageServer.Protocol;
namespace Microsoft.CodeAnalysis.LanguageServer.Handler;
diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj
index c32f01a669587..9bb6d9bd3ff34 100644
--- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj
+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj
@@ -103,7 +103,10 @@
-
+
+
+
+
diff --git a/src/NuGet/VS.ExternalAPIs.Roslyn.Package/VS.ExternalAPIs.Roslyn.Package.csproj b/src/NuGet/VS.ExternalAPIs.Roslyn.Package/VS.ExternalAPIs.Roslyn.Package.csproj
index 438601629916c..a8ed455d0bd2f 100644
--- a/src/NuGet/VS.ExternalAPIs.Roslyn.Package/VS.ExternalAPIs.Roslyn.Package.csproj
+++ b/src/NuGet/VS.ExternalAPIs.Roslyn.Package/VS.ExternalAPIs.Roslyn.Package.csproj
@@ -100,6 +100,7 @@
<_File Include="$(ArtifactsBinDir)Microsoft.CodeAnalysis.VisualBasic\$(Configuration)\netstandard2.0\Microsoft.CodeAnalysis.VisualBasic.dll" TargetDir="" />
<_File Include="$(ArtifactsBinDir)Microsoft.CodeAnalysis.Workspaces.Desktop\$(Configuration)\net472\Microsoft.CodeAnalysis.Workspaces.Desktop.dll" TargetDir="" />
<_File Include="$(ArtifactsBinDir)Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost\$(Configuration)\net472\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.exe" TargetDir="" />
+ <_File Include="$(ArtifactsBinDir)Microsoft.CodeAnalysis.Workspaces.MSBuild.Contracts\$(Configuration)\net472\Microsoft.CodeAnalysis.Workspaces.MSBuild.Contracts.dll" TargetDir="" />
<_File Include="$(ArtifactsBinDir)Microsoft.CodeAnalysis.Workspaces.MSBuild\$(Configuration)\net472\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll" TargetDir="" />
<_File Include="$(ArtifactsBinDir)Microsoft.CodeAnalysis.Workspaces\$(Configuration)\netstandard2.0\Microsoft.CodeAnalysis.Workspaces.dll" TargetDir="" />
<_File Include="$(ArtifactsBinDir)Microsoft.CodeAnalysis\$(Configuration)\netstandard2.0\Microsoft.CodeAnalysis.dll" TargetDir="" />
diff --git a/src/Workspaces/MSBuild/BuildHost/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.csproj b/src/Workspaces/MSBuild/BuildHost/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.csproj
index b8e8fa58b48fb..82b0a8440377a 100644
--- a/src/Workspaces/MSBuild/BuildHost/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.csproj
+++ b/src/Workspaces/MSBuild/BuildHost/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.csproj
@@ -84,6 +84,10 @@
+
+
+
+
@@ -101,6 +105,5 @@
-
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/DiagnosticLogItem.cs b/src/Workspaces/MSBuild/Contracts/DiagnosticLogItem.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/DiagnosticLogItem.cs
rename to src/Workspaces/MSBuild/Contracts/DiagnosticLogItem.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/DocumentFileInfo.cs b/src/Workspaces/MSBuild/Contracts/DocumentFileInfo.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/DocumentFileInfo.cs
rename to src/Workspaces/MSBuild/Contracts/DocumentFileInfo.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/FileGlobs.cs b/src/Workspaces/MSBuild/Contracts/FileGlobs.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/FileGlobs.cs
rename to src/Workspaces/MSBuild/Contracts/FileGlobs.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/IBuildHost.cs b/src/Workspaces/MSBuild/Contracts/IBuildHost.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/IBuildHost.cs
rename to src/Workspaces/MSBuild/Contracts/IBuildHost.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/IProjectFile.cs b/src/Workspaces/MSBuild/Contracts/IProjectFile.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/IProjectFile.cs
rename to src/Workspaces/MSBuild/Contracts/IProjectFile.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/JsonSettings.cs b/src/Workspaces/MSBuild/Contracts/JsonSettings.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/JsonSettings.cs
rename to src/Workspaces/MSBuild/Contracts/JsonSettings.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/MSBuildLocation.cs b/src/Workspaces/MSBuild/Contracts/MSBuildLocation.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/MSBuildLocation.cs
rename to src/Workspaces/MSBuild/Contracts/MSBuildLocation.cs
diff --git a/src/Workspaces/MSBuild/Contracts/Microsoft.CodeAnalysis.Workspaces.MSBuild.Contracts.csproj b/src/Workspaces/MSBuild/Contracts/Microsoft.CodeAnalysis.Workspaces.MSBuild.Contracts.csproj
new file mode 100644
index 0000000000000..aca3cfd069673
--- /dev/null
+++ b/src/Workspaces/MSBuild/Contracts/Microsoft.CodeAnalysis.Workspaces.MSBuild.Contracts.csproj
@@ -0,0 +1,31 @@
+
+
+
+ Library
+ Microsoft.CodeAnalysis
+ $(NetRoslynBuildHostNetCoreVersion);net472
+
+
+ true
+
+ .NET Compiler Platform ("Roslyn") MSBuild host RPC contracts.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/MonoMSBuildDiscovery.cs b/src/Workspaces/MSBuild/Contracts/MonoMSBuildDiscovery.cs
similarity index 93%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/MonoMSBuildDiscovery.cs
rename to src/Workspaces/MSBuild/Contracts/MonoMSBuildDiscovery.cs
index 05228c3bef8b6..a421450743744 100644
--- a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/MonoMSBuildDiscovery.cs
+++ b/src/Workspaces/MSBuild/Contracts/MonoMSBuildDiscovery.cs
@@ -8,7 +8,6 @@
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
-using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.MSBuild;
@@ -20,6 +19,9 @@ internal static class MonoMSBuildDiscovery
private static string? s_monoMSBuildDirectory;
private static string? s_monoVersionString;
+ private static void RequireUnix()
+ => Contract.ThrowIfTrue(Path.DirectorySeparatorChar == '\\');
+
private static IEnumerable GetSearchPaths()
{
if (s_searchPaths == null)
@@ -53,10 +55,7 @@ private static IEnumerable GetSearchPaths()
///
private static string? RealPath(string path)
{
- if (PlatformInformation.IsWindows)
- {
- throw new PlatformNotSupportedException($"{nameof(RealPath)} can only be called on Unix.");
- }
+ RequireUnix();
var ptr = Unix_realpath(path, IntPtr.Zero);
var result = Marshal.PtrToStringAnsi(ptr); // uses UTF8 on Unix
@@ -70,7 +69,7 @@ private static IEnumerable GetSearchPaths()
///
private static string? GetMonoRuntimeExecutablePath()
{
- Contract.ThrowIfTrue(PlatformInformation.IsWindows);
+ RequireUnix();
if (s_monoRuntimeExecutablePath == null)
{
@@ -94,7 +93,7 @@ private static IEnumerable GetSearchPaths()
///
private static string? GetMonoLibDirPath()
{
- Contract.ThrowIfTrue(PlatformInformation.IsWindows);
+ RequireUnix();
const string DefaultMonoLibPath = "/usr/lib/mono";
if (Directory.Exists(DefaultMonoLibPath))
@@ -131,7 +130,7 @@ private static IEnumerable GetSearchPaths()
///
public static string? GetMonoMSBuildDirectory()
{
- Contract.ThrowIfTrue(PlatformInformation.IsWindows);
+ RequireUnix();
if (s_monoMSBuildDirectory == null)
{
@@ -164,7 +163,7 @@ private static IEnumerable GetSearchPaths()
public static string? GetMonoMSBuildVersion()
{
- Contract.ThrowIfTrue(PlatformInformation.IsWindows);
+ RequireUnix();
if (s_monoVersionString == null)
{
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/PackageReference.cs b/src/Workspaces/MSBuild/Contracts/PackageReference.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/PackageReference.cs
rename to src/Workspaces/MSBuild/Contracts/PackageReference.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/ProjectFileInfo.cs b/src/Workspaces/MSBuild/Contracts/ProjectFileInfo.cs
similarity index 98%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/ProjectFileInfo.cs
rename to src/Workspaces/MSBuild/Contracts/ProjectFileInfo.cs
index a82eb5019df94..320c754f5b8be 100644
--- a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/ProjectFileInfo.cs
+++ b/src/Workspaces/MSBuild/Contracts/ProjectFileInfo.cs
@@ -4,7 +4,6 @@
using System.Collections.Immutable;
using System.Runtime.Serialization;
-using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.MSBuild;
@@ -144,7 +143,7 @@ internal sealed class ProjectFileInfo
public ImmutableArray FileGlobs { get; init; }
public override string ToString()
- => RoslynString.IsNullOrWhiteSpace(TargetFramework)
+ => string.IsNullOrWhiteSpace(TargetFramework)
? FilePath ?? string.Empty
: $"{FilePath} ({TargetFramework})";
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/ProjectFileReference.cs b/src/Workspaces/MSBuild/Contracts/ProjectFileReference.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/ProjectFileReference.cs
rename to src/Workspaces/MSBuild/Contracts/ProjectFileReference.cs
diff --git a/src/Workspaces/MSBuild/Contracts/PublicAPI.Shipped.txt b/src/Workspaces/MSBuild/Contracts/PublicAPI.Shipped.txt
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/src/Workspaces/MSBuild/Contracts/PublicAPI.Unshipped.txt b/src/Workspaces/MSBuild/Contracts/PublicAPI.Unshipped.txt
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/Request.cs b/src/Workspaces/MSBuild/Contracts/Request.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/Request.cs
rename to src/Workspaces/MSBuild/Contracts/Request.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/Response.cs b/src/Workspaces/MSBuild/Contracts/Response.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/Response.cs
rename to src/Workspaces/MSBuild/Contracts/Response.cs
diff --git a/src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/TextReaderExtensions.cs b/src/Workspaces/MSBuild/Contracts/TextReaderExtensions.cs
similarity index 100%
rename from src/Workspaces/MSBuild/BuildHost/Rpc/Contracts/TextReaderExtensions.cs
rename to src/Workspaces/MSBuild/Contracts/TextReaderExtensions.cs
diff --git a/src/Workspaces/MSBuild/Core/GlobalUsings.cs b/src/Workspaces/MSBuild/Core/GlobalUsings.cs
new file mode 100644
index 0000000000000..4fea05d8e5047
--- /dev/null
+++ b/src/Workspaces/MSBuild/Core/GlobalUsings.cs
@@ -0,0 +1,6 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+extern alias Contracts;
+global using Contracts::Microsoft.CodeAnalysis.MSBuild;
diff --git a/src/Workspaces/MSBuild/Core/MSBuild/BuildHostProcessKind.cs b/src/Workspaces/MSBuild/Core/MSBuild/BuildHostProcessKind.cs
new file mode 100644
index 0000000000000..fcae4026705fa
--- /dev/null
+++ b/src/Workspaces/MSBuild/Core/MSBuild/BuildHostProcessKind.cs
@@ -0,0 +1,12 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Microsoft.CodeAnalysis.MSBuild;
+
+internal enum BuildHostProcessKind
+{
+ NetCore,
+ NetFramework,
+ Mono
+}
diff --git a/src/Workspaces/MSBuild/Core/MSBuild/BuildHostProcessManager.cs b/src/Workspaces/MSBuild/Core/MSBuild/BuildHostProcessManager.cs
index 8d1234c4f71c0..eeb621f10036e 100644
--- a/src/Workspaces/MSBuild/Core/MSBuild/BuildHostProcessManager.cs
+++ b/src/Workspaces/MSBuild/Core/MSBuild/BuildHostProcessManager.cs
@@ -412,13 +412,6 @@ public static BuildHostProcessKind GetKindForProject(string projectFilePath)
#endif
}
- public enum BuildHostProcessKind
- {
- NetCore,
- NetFramework,
- Mono
- }
-
private sealed class BuildHostProcess : IAsyncDisposable
{
private readonly ILogger? _logger;
diff --git a/src/Workspaces/MSBuild/Core/Microsoft.CodeAnalysis.Workspaces.MSBuild.csproj b/src/Workspaces/MSBuild/Core/Microsoft.CodeAnalysis.Workspaces.MSBuild.csproj
index d782e84f1e211..b61934aff1ff5 100644
--- a/src/Workspaces/MSBuild/Core/Microsoft.CodeAnalysis.Workspaces.MSBuild.csproj
+++ b/src/Workspaces/MSBuild/Core/Microsoft.CodeAnalysis.Workspaces.MSBuild.csproj
@@ -46,6 +46,9 @@
true
+
+
+
@@ -56,7 +59,6 @@
InternalUtilities\GlobalAssemblyCache.cs
-
diff --git a/src/Workspaces/MSBuild/Test/BuildHostProcessManagerTests.cs b/src/Workspaces/MSBuild/Test/BuildHostProcessManagerTests.cs
index 4b3b2604b5502..058279e9b7f5c 100644
--- a/src/Workspaces/MSBuild/Test/BuildHostProcessManagerTests.cs
+++ b/src/Workspaces/MSBuild/Test/BuildHostProcessManagerTests.cs
@@ -2,17 +2,12 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System.Collections.Generic;
-using System.Collections.Immutable;
using System.Linq;
-using Moq;
using Roslyn.Test.Utilities;
using Xunit;
namespace Microsoft.CodeAnalysis.MSBuild.UnitTests;
-using BuildHostProcessKind = BuildHostProcessManager.BuildHostProcessKind;
-
public sealed class BuildHostProcessManagerTests
{
[Fact]
diff --git a/src/Workspaces/MSBuild/Test/DefaultBinLogPathProviderTests.cs b/src/Workspaces/MSBuild/Test/DefaultBinLogPathProviderTests.cs
index 6dd268476fa3b..f7897899403a8 100644
--- a/src/Workspaces/MSBuild/Test/DefaultBinLogPathProviderTests.cs
+++ b/src/Workspaces/MSBuild/Test/DefaultBinLogPathProviderTests.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
@@ -6,10 +6,11 @@
using System.IO;
using System.Linq;
using Xunit;
-using static Microsoft.CodeAnalysis.MSBuild.MSBuildProjectLoader;
namespace Microsoft.CodeAnalysis.MSBuild.UnitTests;
+using BinLogPathProvider = MSBuildProjectLoader.BinLogPathProvider;
+
public sealed class DefaultBinLogPathProviderTests
{
private const string DefaultFileName = "msbuild";
diff --git a/src/Workspaces/MSBuild/Test/GlobalUsings.cs b/src/Workspaces/MSBuild/Test/GlobalUsings.cs
new file mode 100644
index 0000000000000..95a318dfeea30
--- /dev/null
+++ b/src/Workspaces/MSBuild/Test/GlobalUsings.cs
@@ -0,0 +1,9 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+extern alias MSBuildWorkspaces;
+extern alias MSBuildWorkspacesContracts;
+
+global using MSBuildWorkspaces::Microsoft.CodeAnalysis.MSBuild;
+global using MSBuildWorkspacesContracts::Microsoft.CodeAnalysis.MSBuild;
diff --git a/src/Workspaces/MSBuild/Test/Microsoft.CodeAnalysis.Workspaces.MSBuild.UnitTests.csproj b/src/Workspaces/MSBuild/Test/Microsoft.CodeAnalysis.Workspaces.MSBuild.UnitTests.csproj
index 28559303b82a4..3130fb3db8718 100644
--- a/src/Workspaces/MSBuild/Test/Microsoft.CodeAnalysis.Workspaces.MSBuild.UnitTests.csproj
+++ b/src/Workspaces/MSBuild/Test/Microsoft.CodeAnalysis.Workspaces.MSBuild.UnitTests.csproj
@@ -7,9 +7,12 @@
$(NetRoslyn);net472
+
+
+
+
-
diff --git a/src/Workspaces/MSBuild/Test/NetCoreTests.cs b/src/Workspaces/MSBuild/Test/NetCoreTests.cs
index 571170f6eb392..ea714bf4b73c6 100644
--- a/src/Workspaces/MSBuild/Test/NetCoreTests.cs
+++ b/src/Workspaces/MSBuild/Test/NetCoreTests.cs
@@ -133,7 +133,7 @@ public async Task TestOpenInMemoryProject_NetCoreApp()
await using var buildHostProcessManager = new BuildHostProcessManager(ImmutableDictionary.Empty);
- var buildHost = await buildHostProcessManager.GetBuildHostAsync(BuildHostProcessManager.BuildHostProcessKind.NetCore, CancellationToken.None);
+ var buildHost = await buildHostProcessManager.GetBuildHostAsync(BuildHostProcessKind.NetCore, CancellationToken.None);
var projectFile = await buildHost.LoadProjectAsync(projectFilePath, content, LanguageNames.CSharp, CancellationToken.None);
var projectFileInfo = (await projectFile.GetProjectFileInfosAsync(CancellationToken.None)).Single();
diff --git a/src/Workspaces/MSBuild/Test/RpcTests.cs b/src/Workspaces/MSBuild/Test/RpcTests.cs
index a42b14094941b..0aecfab1a2c01 100644
--- a/src/Workspaces/MSBuild/Test/RpcTests.cs
+++ b/src/Workspaces/MSBuild/Test/RpcTests.cs
@@ -2,6 +2,8 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+extern alias MSBuildWorkspaces;
+
using System;
using System.Collections.Generic;
using System.IO.Pipes;
@@ -10,6 +12,8 @@
using Roslyn.Test.Utilities;
using Xunit;
+using NamedPipeUtil = MSBuildWorkspaces::Microsoft.CodeAnalysis.NamedPipeUtil;
+
namespace Microsoft.CodeAnalysis.MSBuild.UnitTests;
///
diff --git a/src/Workspaces/MSBuild/Test/Utilities/DotNetSdkMSBuildInstalled.cs b/src/Workspaces/MSBuild/Test/Utilities/DotNetSdkMSBuildInstalled.cs
index bcfd233935c6d..6fc7abce2bf52 100644
--- a/src/Workspaces/MSBuild/Test/Utilities/DotNetSdkMSBuildInstalled.cs
+++ b/src/Workspaces/MSBuild/Test/Utilities/DotNetSdkMSBuildInstalled.cs
@@ -42,7 +42,7 @@ private static bool HasNetCoreSdkForSolution(string solution)
{
buildHostProcessManager = new BuildHostProcessManager();
- var buildHost = buildHostProcessManager.GetBuildHostAsync(BuildHostProcessManager.BuildHostProcessKind.NetCore, CancellationToken.None).Result;
+ var buildHost = buildHostProcessManager.GetBuildHostAsync(BuildHostProcessKind.NetCore, CancellationToken.None).Result;
return buildHost.HasUsableMSBuildAsync(solution, CancellationToken.None).Result;
}
diff --git a/src/Workspaces/MSBuild/Test/Utilities/VisualStudioMSBuildInstalled.cs b/src/Workspaces/MSBuild/Test/Utilities/VisualStudioMSBuildInstalled.cs
index 9d3864be2b924..347ce870f7f84 100644
--- a/src/Workspaces/MSBuild/Test/Utilities/VisualStudioMSBuildInstalled.cs
+++ b/src/Workspaces/MSBuild/Test/Utilities/VisualStudioMSBuildInstalled.cs
@@ -32,7 +32,7 @@ private static bool IsVisualStudioMSBuildInstalled()
{
buildHostProcessManager = new BuildHostProcessManager();
- var buildHost = buildHostProcessManager.GetBuildHostAsync(BuildHostProcessManager.BuildHostProcessKind.NetFramework, CancellationToken.None).Result;
+ var buildHost = buildHostProcessManager.GetBuildHostAsync(BuildHostProcessKind.NetFramework, CancellationToken.None).Result;
// HACK: for .NET Framework build hosts, we don't actually need the project path to determine whether there's a usable VS -- so we can pass any file name here.
return buildHost.HasUsableMSBuildAsync("NonExistent.sln", CancellationToken.None).Result;