如何将程序集绑定重定向到当前版本或更高版本?

fli*_*ubt 5 .net c# app-config assembly-binding-redirect

即使我的引用Specific Version设置为false,我也会收到程序集绑定错误,因为目标计算机的版本更高.当某些目标计算机可能具有版本1.61.0.0而其他目标计算机具有1.62.0.0或更高版本时,如何指定当前版本或更高版本以避免以下错误?

System.IO.FileLoadException: Could not load file or assembly 'ServerInterface.NET, Version=1.61.0.0, Culture=neutral, PublicKeyToken=151ae431f239ddf0' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'ServerInterface.NET, Version=1.61.0.0, Culture=neutral, PublicKeyToken=151ae431f239ddf0'
Run Code Online (Sandbox Code Playgroud)

Luk*_*ett 12

您需要为绑定重定向添加Web.config/App.config密钥(请将版本更改为您实际需要的版本):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="ServerInterface.NET" publicKeyToken="151ae431f239ddf0" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

oldVersion属性设置要重定向的版本范围.该newVersion属性设置应重定向到的确切版本.

如果你正在使用NuGet,你可以自动完成Add-BindingRedirect. 这是一篇解释它的文章

有关绑定重定向的更多信息,请参见此处.

  • 但我不知道我想要重定向的确切版本.当前版本为1.61.0.0,但有些客户端可能有1.62.0.0而其他客户端可能有1.63.0.0但旧版本可能仍然使用我的应用程序部署的1.61.0.0. (2认同)

fli*_*ubt 2

重定向代码中的绑定允许我使用任何版本。您可能需要进行比这更多的检查,因为这会将任何失败的尝试重定向到具有相同名称的任何程序集。

public static void Main()
{
    AppDomain.CurrentDomain.AssemblyResolve += _HandleAssemblyResolve;
}

private Assembly _HandleAssemblyResolve(object sender, ResolveEventArgs args)
{
    var firstOrDefault = args.Name.Split(',').FirstOrDefault();
    return Assembly.Load(firstOrDefault);
}
Run Code Online (Sandbox Code Playgroud)