C# 从应用程序集清单中查找文件名

C# 从应用程序集清单中查找文件名,c#,.net,C#,.net,假设我读了exe的清单。大概是这样的: //Load Assembly obj_assembly = Assembly.LoadFile(m_strAssembly); //Return Referenced Assemblies return obj_assembly.GetReferencedAssemblies(); 我得到了一个汇编对象,比如“{Tools,Version=5.4.620.7,Culture=neutral,PublicKeyToken=null}”。我如何知道它是来

假设我读了exe的清单。大概是这样的:

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

我得到了一个汇编对象,比如“{Tools,Version=5.4.620.7,Culture=neutral,PublicKeyToken=null}”。我如何知道它是来自“Tools.dll”还是“Tools.exe”?程序集对象中是否有某些属性或某些技巧可以告诉您它是EXE还是DLL?

否,程序集没有固定的文件扩展名。您可以通过Fuslogvw.exe(记录所有绑定)看到一些东西。您将看到它首先搜索.exe,然后搜索.dll

一些可以观察到的副作用:您可以毫无问题地添加对EXE的引用。或者,您可以将类库程序集从.dll任意重命名为.exe,但它仍然可以工作


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

您是正确的。刚刚意识到我在fuslogvw看到了这一点。我想我会做一个简单的搜索,比如查找一个.exe,然后是.dll。希望他们不会像tools.dll和tools.exe那样耍花招。我想我可以寻找匹配的版本号和publictoken/文化(如果存在)。希望避免做这样的事。。。哦,好吧。。。谢谢