2017-08-11 44 views
1

我們使用C#羅斯林2.3.1版編程.csproj的項目。單聲道:無法用於打開加載文件或程序集「System.Threading.Tasks.Dataflow」

爲此,我們使用的是由羅斯林通過每個Microsoft.CodeAnalysis.Document打開的.csproj和導航提供了以下標準的API代碼來獲取文件的語法樹:

public void BrowsProjectDocuments(string projectPath) 
{ 
    var workspace = MSBuildWorkspace.Create(); 
    workspace.WorkspaceFailed += WorkSpaceFailed; 
    Project currentProject = workspace.OpenProjectAsync(projectPath).Result;  

    foreach(Document document in currentProject.Documents) 
    { 
     Task<SyntaxTree> documentSyntaxTree = document.GetSyntaxTreeAsync(); 
     ..... 
     ..... 
    } 
} 

private static void WorkSpaceFailed(object sender, WorkspaceDiagnosticEventArgs e) 
{ 
    Console.WriteLine(e.Diagnostic.Message); 
} 

當我們在運行上面的代碼的Windows 7使用的.NET Framework 4.6.1/4.6.2羅斯林2.3.1,代碼運行良好,我們得到的每個文件的所需語法樹

但是,當我們嘗試在運行相同的代碼的Ubuntu 16.04currentProject.Documents回報數,我們可以得到以下的拋出錯誤WorkSpaceFailed事件掛鉤:

Msbuild在處理文件時失敗 '/home/user/CSharp/RoslynSamples/AplModel/AplModel.csproj' 帶有消息: 無法加載字段類型 'Microsoft.Build.Ba ckEnd.Logging.LoggingService:_loggingQueue'(20) 由於:無法加載文件或程序集 'System.Threading.Tasks.DataStream,Version = 4.5.24.0,Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'或其中一個依賴。 組件:System.Threading.Tasks.Dataflow,版本= 4.5.24.0, 文化=中性公鑰= b03f5f7f11d50a3a類型:成員:

我們已經使用安裝單Ubuntu的機器上:

sudo apt-get install mono-complete

我們缺少什麼?

回答

0

MSBuildWorkspace目前不是跨平臺的。它只適用於.net桌面clr。但是我對mono的知識並不是很好,所以有可能讓它在單聲道上工作。您的錯誤消息告訴我,您需要以某種方式包含DataFlow庫。

0

這裏看看解決方法:https://github.com/Microsoft/msbuild/issues/1469 你需要使用一個單聲道託管的MSBuild(例如,從單聲道採取或內置單聲道下),從安裝的NuGet和System.Threading.Tasks.Dataflow包Microsoft.VisualStudio.RemoteControl。

相關問題