2015-12-15 33 views
0

我试图执行下面的代码,看是否装配始建于调试或发布模式的麻烦。思考 - 以加载依赖程序集

Assembly assemb = Assembly.LoadFile(fileName); 
bool isDebug = false; 
foreach (object att in assemb.GetCustomAttributes(false)) 
    if (att is DebuggableAttribute) 
     isDebug = ((DebuggableAttribute)att).IsJITTrackingEnabled; 
Console.WriteLine("Assembly is {0}.", isDebug ? "debug" : "release"); 

我能够没有任何问题加载程序集(Product.dll)。但是当我试图执行GEtCustomAttributes(false)方法时,我得到了异常消息。

无法加载文件或程序集“log4net的,版本= 1.2.11.0, 文化=中性公钥=空”或它的一个依赖。 系统找不到指定的文件。

不知道这是为什么寻找依赖程序集。是否因为建立Product.dll的方式(如优化或其他)?我没有访问源代码Product.dll所以不知道我怎么能提交其模式(调试或发布)

+0

你可以用'ReflectionOnlyLoad()'而不是'LoadFile()'来试试,这样依赖不会被加载吗? –

回答

0

如果log4net的是你引用的项目强制性的(意思是直接引用的)组件,你必须还加载它,没有办法只加载部分的程序集。说了这个引用程序集的代码如果log4net.dll丢失,它甚至不会编译,所以它不得不以任何方式加载它。

无论如何obiosly在引用的程序集中定义的任何属性都需要Loggerlog4net,所以它会搜索该类型。

log4net assembly到您的构建路径,它应该工作。

3

通常依赖DLL不会被编译到所得到的DLL。这意味着如果Product.dll编译时依赖于log4net.dll,它必须位于同一个文件夹中。
应该可以简单地复制到log4net.dll其中Product.dll位于同一文件夹中。

的依赖性如果在Product.dll定义的类型引用在log4net.dll定义的类型必须被加载。在这种情况下,我强烈怀疑它会是Logger/ILog,因为通常会包含此行以获取Logger

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(); 
相关问题