【问题标题】:Is it possible to reference DLLs from parent folders in .NET?是否可以从 .NET 的父文件夹中引用 DLL?
【发布时间】:2015-02-18 11:01:21
【问题描述】:

我们有以下情况/要求:

  • 我们有多个项目使用相同的 DLL(我们开发的)。
  • 不同的项目应该能够使用这些 DLL 的不同版本
  • 一个项目内的应用程序都应使用相同的版本
  • 应该可以更新单个项目的 DLL,这样该项目中的所有应用程序都会受到影响。其他项目不受影响。
  • 每个应用程序都有自己的目录

这导致以下所需的文件夹结构:

SomePath
  |- SomeProject
  |     |- DLL
  |     |- Application1
  |     \- Application2
  |
  \- OtherProject
       |- DLL
       \- ...

为了让不同的项目可以使用不同的版本,在 GAC 中注册是不可能的(是吗?)。 也无法使用probing private path 解决方案,因为该方法仅支持子目录,不支持父文件夹。

据我了解,Assembly.LoadFrom 可以工作,但意味着将这些库中的每个 new 类型调用替换为反射调用(或不是?),这意味着很多工作。

有没有一种方法可以引用指定的 DLL 而不必使用反射? IE。指定父文件夹的相对包含路径。

提示:开发机器为Windows 8.1,VS 2013;目标机器是 Windows 8.1

【问题讨论】:

  • 不。这不是它的工作方式。
  • 每个程序员都至少犯过一次这个错误,通常是好几次。学会尊重 DLL 地狱兽是不能教的,它必须经历。所以继续用枪指着你的脚。您不会从 CLR 获得任何帮助,您必须自己扣动扳机。实现 AppDomain.AssemblyResolve 事件。
  • AssemblyResolve 仍然需要我使用反射,不是吗?毕竟,这些库当前是在执行 Main() 之前加载的。

标签: .net assemblies


【解决方案1】:

在进一步研究后回答我自己的问题:

看起来在这种情况下唯一的选择是:

  1. 将共享 DLL 部署到每个应用程序目录或
  2. 让系统工程师相信没有必要将每个应用程序都放到自己的目录中。如果所有应用程序都在同一个目录中,则共享的 DLL 可以放在该目录或任何子目录中。如果应用程序配置数据需要分开,这仍然可以在更多的子文件夹中完成。

我们选择了#2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多