Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将程序集绑定重定向到当前版本或更高版本?_C#_.net_App Config_Assembly Binding Redirect - Fatal编程技术网

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

C# 如何将程序集绑定重定向到当前版本或更高版本?,c#,.net,app-config,assembly-binding-redirect,C#,.net,App Config,Assembly Binding Redirect,即使我的引用将特定版本设置为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=15

即使我的引用将
特定版本
设置为
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'

您需要为绑定重定向添加Web.config/App.config键,如下所示(请将版本更改为您实际需要的版本):


请参见此处了解允许我使用任何版本。您可能需要执行更多的检查,因为这会将任何失败的尝试重定向到具有相同名称的任何程序集

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);
}

但我不知道我想要重定向到的确切版本。当前版本为1.61.0.0,但某些客户端可能有1.62.0.0,而其他客户端可能有1.63.0.0,但较旧的客户端可能仍使用部署在我的应用程序中的1.61.0.0。查看该版本,您似乎必须在加载的程序集中明确显示
newVersion
更多详细信息。您可以基于客户端转换配置文件吗?您可以使用:var assemblyFromTxt=new AssemblyName(args.Name);返回Assembly.Load(assemblyFromTxt.Name);这是危险的。如果无法加载程序集,它将创建堆栈溢出。它还可能导致autofac停止生成错误日志,因为它无法读取必要的资源。它甚至可能导致更多的问题。
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);
}