2017-04-21 331 views
2

當我運行dotnet --info,以及其他信息我也收到:如何獲得系統.NET Core運行時環境的基本路徑?

Runtime Environment: 
... 
Base Path: C:\Program Files\dotnet\sdk\1.0.0 

有沒有辦法以編程方式在C#應用程序獲取此值.NETCoreApp框架下運行?我對Sdks子目錄特別感興趣,因爲我需要在處理某些.NET Core項目時將其提供給MSBuild的託管實例。因此,諸如AppContext.BaseDirectory之類的屬性對我來說沒有用,因爲它們指向當前應用程序的路徑。

我可能會最終啓動dotnet --info並解析其結果,但我不知道是否存在更優雅的方式。謝謝。

編輯:原來這裏有誤dotnet --version而不是dotnet --info

回答

2

您可以從應用程序運行「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."); 
    } 
} 
0

安裝此軟件包https://www.nuget.org/packages/Microsoft.DotNet.PlatformAbstractions/

ApplicationEnvironment.ApplicationBasePath會給你你要找的內容之後。我發現這個通過查看dotnet源代碼

https://github.com/dotnet/cli/blob/f62ca5e235e253c033c628a39852d5923d53688a/src/dotnet/Program.cs#L251

+1

我想太多,但不幸的是它返回在編譯的應用程序的組件所在的目錄,例如'... \ MYAPP \ BIN \調試\ netcoreapp1.0'。它僅適用於'dotnet --info',因爲CLI工具本身位於所需的目錄中(例如'C:\ Program Files \ dotnet \ sdk \ 1.0.0')。 –

相關問題