单声道:无法用于打开加载文件或程序集“System.Threading.Tasks.Dataflow”

问题描述:

我们使用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

我们缺少什么?

MSBuildWorkspace目前不是跨平台的。它只适用于.net桌面clr。但是我对mono的知识并不是很好,所以有可能让它在单声道上工作。您的错误消息告诉我,您需要以某种方式包含DataFlow库。

这里看看解决方法:https://github.com/Microsoft/msbuild/issues/1469 你需要使用一个单声道托管的MSBuild(例如,从单声道采取或内置单声道下),从安装的NuGet和System.Threading.Tasks.Dataflow包Microsoft.VisualStudio.RemoteControl。