【问题标题】:Assembly binding added in compiled output (app.config)在编译输出 (app.config) 中添加了程序集绑定
【发布时间】:2020-10-27 13:23:42
【问题描述】:

如果我编译我的应用程序,则会在输出中自动添加一个程序集绑定。具体的程序集绑定不在 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.7.3的目录下有4.0.2.2的版本

非常感谢!

【问题讨论】:

    标签: c# .net visual-studio msbuild assembly-binding-redirect


    【解决方案1】:

    其实BindingRedirectpackages.confignuget管理格式的特点,还是有一些不足的地方。

    有什么办法可以检查为什么要添加程序集绑定 自动地?选项 AutoGenerateBindingRedirects 未启用。

    此行为由 nuget 包本身和packages.config nuget 管理格式控制。由于您的代码使用了来自不同版本程序集的部件,而packages.config 管理格式不具备自动切换它们的能力。

    所以 BindingRedirect 出现了。并且到目前为止,一些nuget包已经添加了packages.config这个特性,当你通过packages.config安装这个nuget包时,它会自动添加BindingRedirect,它不受我们控制。 p>

    为了放弃BindingRedirect和所有这些复杂的问题,我建议你可以使用新的PackageReference nuget management format。解决了BindingRedirect问题,优化了包管理,是一个更好的解决方案。而在这一项中,您必须使用 BindingRedirect

    建议

    1)右击packages.config文件-->点击Migrate packages.config to PackageReference

    2) 然后删除app.config 文件上的所有绑定重定向。

    3) 如果有,请删除您的xxx.csproj 文件中的任何AutoGenerateBindingRedirects

    4)关闭VS,删除解决方案文件夹下的.vs隐藏文件夹,所有binobj输出文件夹。

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

    【讨论】:

    • 感谢您的回答!我们已经在所有项目中使用了PackageReference。此外,在 Azure DevOps 中构建时也会出现此问题(任何构建的干净映像)。但我会检查所有缓存和相关项目。到目前为止,谢谢!
    • 检查每个项目并删除每个app.configweb.config上的任何bindredirect,然后删除bin和obj文件夹,签入每个项目。
    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2015-02-17
    相关资源
    最近更新 更多