当我运行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