【发布时间】:2016-04-13 10:03:34
【问题描述】:
我不想通过代码动态加载库。
我想做如下的事情:
//first assembly
public void Go()
{
//second assembly does not loaded yet
var s = new TestItem(); //at this point second assembly will be loaded before calling the constructor
}
//second assembly
public class TestItem
{
public TestItem()
{
}
}
即我只想在调用程序集中的成员时才加载引用的库。可能吗?如果可能的话 - 我该怎么做?
【问题讨论】:
-
不要相信如果没有你调用的某种包装类在你第一次调用它时加载 dll 是可能的 - 请参阅shim
-
如果我理解正确的话,也许托管可扩展性框架 (MEF) 及其延迟加载功能可以为您提供帮助。
-
程序集是动态加载的。但是加载发生的时间比您预期的要早一个阶段——因为系统在编译一个使用来自程序集的类型的方法时需要加载程序集。 (或者当它访问使用依赖类型作为基类或实现接口的类型时)
-
@Damien_The_Unbeliever 是对的。引用程序集不必每次都呈现。它们仅在使用来自其他程序集的类型(字段/属性/方法参数)的类型/方法时加载。
-
@Damien_The_Unbeliever 所以,我的问题的答案是“否”。那么,我可以强制项目在运行时编译引用的程序集吗?
标签: c#