引用C#中另一个应用程序提供的外部.NET DLL

Roh*_*hit 5 .net c# reflection

我有一个C#项目,它引用了另一个应用程序附带的DLL(称为外部DLL).当我构建我的项目时,由于引用,外部DLL会自动添加到我的项目输出中.当我运行我的项目时,它从我的项目文件夹加载外部DLL.

外部DLL所属的另一个应用程序是由另一个团队开发的,并且DLL会定期更新.我不想用我的项目打包他们的DLL.相反,我想让我的项目在执行时加载他们的DLL - 而不是从我项目的文件夹中选择DLL副本.

现在我知道通过反思这是可能的.我知道我可以做一个"Assembly.Load"并选择DLL.但是因为我通过我的代码使用外部DLL中的类型,所以我希望代码是静态类型检查的.

这就是我想要的:

  1. 能够通过引用外部DLL来编译我的项目,从而获得静态类型检查.
  2. 当项目运行时,外部DLL从另一个应用程序的文件夹中获取,而不是我项目的输出文件夹中的DLL副本.

有什么方法可以解决这个问题吗?在添加引用和使用反射之间是否存在一些中间立场?

Sco*_*sen 5

对您的问题最直接的解决方案是更改引用的属性.有一个叫做的设置Copy Local.将其设置为false,它将停止将DLL复制到项目的输出.您可以通过展开解决方案中的references文件夹,右键单击相关引用,然后单击属性以打开属性窗格来访问引用的属性.

Visual Studio在构建时将DLL复制到项目的输出文件夹这一事实对于.Net Framework在运行时并不重要.重要的是,您引用的程序集在其搜索的路径或全局程序集缓存中可供框架使用.