如何获取整个系统核心运行时环境的基本路径



当我运行dotnet --info时,我还收到的其他信息:

Runtime Environment:
 ...
 Base Path:   C:Program Filesdotnetsdk1.0.0

有什么方法可以在.netCoreApp框架下运行的C#应用程序中以编程为程序?我对其Sdks子目录特别感兴趣,因为在处理某些.NET核心项目时,我需要将其提供给MSBuild的托管实例。因此,诸如AppContext.BaseDirectory之类的属性对我没有用,因为它们指向当前应用程序的路径。

我可能最终会启动dotnet --info并解析其结果,但我想知道是否存在更优雅的方式。谢谢。

编辑:原始的 dotnet --version而不是 dotnet --info

您可以从应用程序中运行" dotnet -info"命令并解析输出。

快速而肮脏:

class Program
{
    static void Main(string[] args)
    {
        var basePath = GetDotNetCoreBasePath();
        Console.WriteLine();
        Console.ReadLine();
    }
    static String GetDotNetCoreBasePath()
    {
        Process process = new Process
        {
            StartInfo =
            {
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                CreateNoWindow = true,
                FileName = "dotnet",
                Arguments = "--info"
            }
        };
        process.Start();
        process.WaitForExit();
        if (process.HasExited)
        {
            string output = process.StandardOutput.ReadToEnd();
            if (String.IsNullOrEmpty(output) == false)
            {
                var reg = new Regex("Base Path:(.+)");
                var matches = reg.Match(output);
                if (matches.Groups.Count >= 2)
                    return matches.Groups[1].Value.Trim();
            }
        }
        throw new Exception("DotNet Core Base Path not found.");
    }
}

安装此软件包后

ApplicationEnvironment.ApplicationBasePath将为您提供所需的东西。我通过查看dotnet源代码来找到这一点...

https://github.com/dotnet/cli/blob/f62ca5e235e2535e253c033c628a398525923d53688a/src/src/src/dotnet/dotnet/program.cs#l251

相关内容

  • 没有找到相关文章

最新更新