我有许多使用特定 .dll 程序集的 .NET WinForm 应用程序。推出此特定产品的公司偶尔会发布新版本。由于他们提供强名称程序集,我需要下载他们的 .dll 的新版本,而且还要检查我的每一个应用程序并参考新的 .dll 文件重新构建它们。然后,我需要部署我的每一个应用程序。执行此操作需要大量时间、文书工作和测试,因此我向此 .dll 的制造商询问了解决方法。
他们给了我这个 Stack Overflow 线程作为建议,并说它会“完美运行”。但是,我还没有完全弄清楚这一点。
在我的应用程序中,我已将其添加到 Program.cs:
static Program()
{
AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs e)
{
AssemblyName requestedName = new AssemblyName(e.Name);
if (requestedName.Name.ToUpper().StartsWith("THE.PRODUCT.NAME"))
{
AssemblyName assemblyName = AssemblyName.GetAssemblyName(@"C:\The.Product.Name.15.5.0.0.dll");
return Assembly.LoadFile(@"C:\The.Product.Name.15.5.0.0.dll");
}
else
{
return null;
}
};
}
为了使其正常工作,我必须在其默认位置删除/重命名普通产品 .dll 文件,并将新版本简单地放在根 C:\ 目录中(如代码所示)。从其正常位置删除 .dll 的原因是“AssemblyResolve”处理程序会触发,因为无法找到引用的程序集。
无论如何,使用上面的代码,我的应用程序给出了以下异常:“尝试从网络位置加载程序集,这会导致程序集在以前版本的 .NET Framework 中被沙盒化。这个 .NET 版本框架默认不启用 CAS 策略,...”等等。
我在这里到底做错了什么?有人甚至理解我想要完成的事情吗?我不敢相信以前没有这样做过,但在这一点上我有点不知所措。
任何帮助将不胜感激。谢谢你。