程序集绑定已添加到编译输出app.config

问题描述

如果我编译我的应用程序,则程序集绑定将自动添加输出中。特定的程序集绑定不在Visual Studioapp.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编译)时,会发生以下情况:

enter image description here

这很奇怪,因为我们在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隐藏文件夹,任何binobj输出文件夹。

enter image description here

5)重新启动项目,然后再次构建以对其进行测试。