我正在尝试更新使用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)'
有关如何修复的想法吗?
答案 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文件中似乎已经完成了。