/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/MSBuild/BuildHost/Program.cs
71 строка
2 KB
Jason Malinowski
Fix the ability to invoke async methods across the AppDomain boundary
01 май 2026, 02:36
01 май 2026, 02:36
d643ebf
Код
Авторство
О чём код?
// 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. using System; using System.Globalization; using System.IO.Pipes; using System.Threading.Tasks; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.MSBuild; internal static class Program { internal static async Task<int> Main(string[] args) { // Note: we should limit the data passed through via command line strings, and pass information through IBuildHost.ConfigureGlobalState whenever possible. // This is because otherwise we might run into escaping issues, or command line length limits. var logger = new BuildHostLogger(Console.Error); if (args is not [var pipeName, var cultureName]) { logger.LogCritical($"Expected arguments: <pipe name> <culture>"); return -1; } try { CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo(cultureName); } catch (CultureNotFoundException) { // We couldn't find the culture, log a warning and fallback to the OS configured value. logger.LogWarning($"Culture '{cultureName}' was not found, falling back to OS culture"); } logger.LogInformation($"BuildHost Runtime Version: {System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription}"); var pipeServer = NamedPipeUtil.CreateServer(pipeName, PipeDirection.InOut); await pipeServer.WaitForConnectionAsync().ConfigureAwait(false); RpcServer server; AbstractBuildHost buildHost; #if NETFRAMEWORK if (PlatformInformation.IsRunningOnMono) { server = new RpcServer(pipeServer); buildHost = new MonoBuildHost(logger, server); } else { (buildHost, server) = NetFrameworkBuildHost.Create(logger, pipeServer); } #else server = new RpcServer(pipeServer); buildHost = new NetCoreBuildHost(logger, server); #endif var targetObject = server.AddTarget(buildHost); Contract.ThrowIfFalse(targetObject == 0, "The first object registered should have target 0, which is assumed by the client."); await server.RunAsync().ConfigureAwait(false); logger.LogInformation("RPC channel closed; process exiting."); return 0; } }