问题描述
如果我编译我的应用程序,则程序集绑定将自动添加到输出中。特定的程序集绑定不在Visual Studio的app.config
中,而在创建的应用程序配置中。
有什么方法可以检查为什么自动添加了程序集绑定?未启用选项AutoGenerateBindingRedirects
。
我不想具有以下程序集绑定
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="system.io.pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.2" newVersion="4.0.2.2" />
</dependentAssembly>
</assemblyBinding>
此外,安装了完全不同的程序集版本。
编辑
查看编译器binlog
的结果(使用msbuild / bl编译)时,会发生以下情况:
这很奇怪,因为我们在4.0.2.2
目录中有4.7.3
版
非常感谢您!
解决方法
实际上, BindingRedirect 是packages.config
nuget管理格式的功能,它仍然有一些缺点。
有什么办法检查为什么要添加程序集绑定 自动吗?未启用选项AutoGenerateBindingRedirects。
此行为由nuget包本身和packages.config
nuget管理格式控制。由于您的代码使用了来自不同版本程序集的零件,并且packages.config
管理格式无法自动切换它们。
因此出现 BindingRedirect 。到目前为止,某些nuget软件包已在packages.config
中添加了此功能,当您通过packages.config
安装此nuget软件包时,它将自动添加 BindingRedirect ,并且不受此控制我们。
为了放弃 BindingRedirect 和所有这些复杂的问题,建议您使用新的PackageReference nuget management format。并且它是解决了 BindingRedirect 问题并优化了程序包管理的更好的程序。在这一本书中,您必须使用 BindingRedirect 。
建议
1)右键单击packages.config
文件->单击将packages.config迁移到PackageReference 。
2),然后删除app.config
文件上的所有bindredirect。
3)删除AutoGenerateBindingRedirects
文件中的所有xxx.csproj
。
4)关闭VS,删除解决方案文件夹下的.vs
隐藏文件夹,任何bin
和obj
输出文件夹。
5)重新启动项目,然后再次构建以对其进行测试。