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

标签 c# .net reflection

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

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

现在我知道这是可以通过反射(reflection)实现的。我知道我可以执行“Assembly.Load”并选择 DLL。但是因为我在整个代码中都使用了外部 DLL 中的类型,所以我希望对代码进行静态类型检查。

这是我想要的:

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

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

最佳答案

解决您问题的最直接方法是更改​​引用的属性。有一个名为 Copy Local 的设置。将其设置为 false,它将停止将 DLL 复制到项目的输出中。您可以通过展开解决方案中的引用文件夹、右键单击相关引用并单击属性以打开属性 Pane 来访问引用的属性。

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

关于c# - 在 C# 中引用另一个应用程序提供的外部 .NET DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919916/

相关文章:

c# - LINQ to Entities - 多个 OrderBy 方法不起作用

java - 实例化类型参数的对象

c# - Entity Framework Core 使用多个 DbContext

c# - 找不到类型或命名空间 'Assembly'(是否缺少 using 指令或程序集引用?)

c# - 几个插入性能 c#

.net - OWIN OAuth token 端点通配符支持

c# - 使用多个asp创建Bootstrap-Datepicker :Repeater TextBoxes

c# - 当只有一个成员的类型不同时,将子类视为其父类(super class)

java - 对方法列表进行排序

java - 如何安全地删除一个方法,如何知道它是否没有被反射使用?