2014-01-08 53 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

相關問題