2014-01-08 23 views
0

假设我读取了exe文件的清单。事情是这样的:从应用程序集清单中查找文件名

//Load Assembly 
obj_assembly = Assembly.LoadFile(m_strAssembly); 
//Return Referenced Assemblies 
return obj_assembly.GetReferencedAssemblies(); 

,我得到“{工具,版本= 5.4.620.7,文化=中立,公钥=空}”例如一个装配对象。我如何知道它是来自“Tools.dll”还是“Tools.exe”? Assembly对象中是否有一些属性或者一些技巧来告诉它是否是EXE或DLL?

回答

1

不,程序集没有固定的文件扩展名。你可以看到Fuslogvw.exe(记录所有绑定)。你会看到它首先搜索.exe,然后是.dll。

一些可观察到的副作用:您可以添加对EXE的引用而不会出现问题。或者你可以任意地将一个类库程序集从.dll重命名为.exe,它仍然有效。

理智的做法是假设创建这个程序集的人不会像这样拉特技。您会希望引用程序集是类库,并存储在名为tools.dll的文件中。这实际上是一个足够好的近似,因为实际上找到该文件并不那么容易。您必须重现CLR搜索规则,这些规则可能变得非常复杂,您对绑定覆盖和探测路径了解不够。

+0

你是对的。刚刚意识到我在fuslogvw中看到了这一点。我想我会做一个简单的搜索,如寻找一个.exe,然后.dll。希望他们不会像tools.dll和tools.exe那样拉开诡计。我想我可以寻找版本号来匹配和宣传/文化,如果他们存在。希望避免做这样的事情......噢,好吧......谢谢! – Denis

相关问题