将解决方案更新到.net framework 4.7:与Roslyn

时间:2017-05-17 15:48:31

标签: .net nuget roslyn

我正在尝试更新使用roslyn到4.7的解决方案。 更新nuget包时,我收到以下错误:

  

在现有packages.config文件中检测到一个或多个未解决的程序包依赖性约束。必须解决所有依赖关系约束以添加或更新包。如果正在更新这些包,则可以忽略此消息,如果不是,则以下错误可能阻止当前包操作:' System.Security.Cryptography.Algorithms 4.3.0约束:System.IO(> = 4.3.0)'

然后,当尝试使用Roslyn时,我得到一个例外,运行以下代码:

var compilation = CSharpCompilation.Create("MyCompilation", new[] {syntaxTree}, references);
var diag = compilation.GetDiagnostics();

例外是:

  

托管调试助手' BindingFailure'发生了     的HResult = 00000000     Message = 托管调试助手' BindingFailure' '具有显示名称和System.Security.Cryptography.Algorithms'的程序集。未能加载“LoadFrom”#39;绑定ID为1的AppDomain上下文。失败的原因是:System.IO.FileLoadException:无法加载文件或程序集&System; Security.Cryptography.Algorithms,Version = 4.0.0.0,Culture = neutral,公钥= b03f5f7f11d50a3a'或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT的例外情况:0x80131040)'

有关如何修复的想法吗?

2 个答案:

答案 0 :(得分:0)

您可能希望向我们展示packages.config文件的内容。 从您看起来需要将System.IO升级到版本4.3.0或更高版本,因为System.Security.Cryptography.Algorithms需要它。

答案 1 :(得分:0)

原来问题在于依赖程序集重定向。 看起来VS2017在我的app.config文件中添加了很多这些。

更改:

  <dependentAssembly>
    <assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
  </dependentAssembly>

用这个:

  <dependentAssembly>
    <assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.1.0.0" />
  </dependentAssembly>

在我的主项目app.config文件中似乎已经完成了。