单声道:无法用于打开加载文件或程序集“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.04,currentProject.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。