0

我有许多使用特定 .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 策略,...”等等。

我在这里到底做错了什么?有人甚至理解我想要完成的事情吗?我不敢相信以前没有这样做过,但在这一点上我有点不知所措。

任何帮助将不胜感激。谢谢你。

4

0 回答 0