我正在尝试执行下面的代码,以查看程序集是在Debug或Release模式下构建的。
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, Culture = neutral,PublicKeyToken = null'或其中一个依赖项。该 系统找不到指定的文件。
不知道为什么要寻找依赖装配。是因为构建Product.dll
的方式(如优化或其他方式)。我无法访问Product.dll
的源代码,所以不确定如何提交其模式(调试或发布)
答案 0 :(得分: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();
答案 1 :(得分:0)
如果log4net是您引用项目的必需(意思是直接引用)程序集,您还必须加载它,则无法仅加载程序集的部分。话虽如此,如果缺少log4net.dll,引用程序集的代码可能不会编译,所以它可以以任何方式加载它。
无论如何,在引用的程序集中定义的任何属性都需要来自Logger
的{{1}},因此它将搜索该类型。
将log4net
assembly放入构建路径中,它应该可以正常工作。