安装后绑定重定向不适用

Binding redirect not applying after installation

最近我天真地 运行 包管理器控制台中的 'Update-Package' 命令认为拥有最新版本的东西会很好。它造成了无穷无尽的问题,虽然我已经处理了大部分问题,但最近的一个让我很困惑。

事实证明很难修复,因为它不会在开发过程中发生。安装我的应用程序后,尝试某个操作提示此错误,即使在我的开发机器上也是如此:

这发生在多个程序集上,我只是选择这个作为示例。在项目中,我有一个 BindingRedirect 在我的 app.config 文件中使用版本 4.0.0.0:

<configuration>

  [Settings]

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

      [Other redirects]

      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.SqlClient" publicKeyToken="23ec7fc2d6eaa4a5" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>

      [Other redirects]

    </assemblyBinding>
  </runtime>
</configuration>

(注意 PublicKeyToken 在错误和 BindingRedirect 之间匹配)

在我的解决方案中,Microsoft.Data.SqlClient 的参考版本是 4.0.0.0 并且 'Copy Local' 设置为 true。我的安装程序(使用高级安装程序)成功地将匹配的 .dll 副本放入已安装应用程序的目录中。

我试图搜索修复程序,但大多数解决方案都处理格式错误的 app.config 文件或完成开发构建。据我所知,我的 app.config 没问题,问题仅在安装后出现。

我是否需要采取一些步骤才能将绑定重定向显式嵌入到我的应用程序中?这可能是安装程序无法从 app.config 中获取某些内容的问题吗?运行?

我正在继续寻找解决方案,但同时想在这里提问,以防我遗漏了一些明显的东西。感谢阅读。

我为未来的 Google 员工找到了自己的解决方案:

使用 'Update-Package' 在 app.config 中生成了很多 BindingRedirects。构建项目会在包含这些重定向的项目输出目录中创建一个 ApplicationName.exe.config。问题是 Advanced Installer 不会自动更新生成的 ApplicationName.exe.config 文件。 (它自己解决了很多事情,这不是其中之一!)

我删除并重新添加了那个配置文件;新版本包含了我的应用程序所需的重定向,我能够再次顺利 运行。