2009-12-29 22 views
5

我試圖做一個項目的快速和骯髒的部署。我認爲運行我的過程會很容易,使用一些工具來獲取所有加載文件(DLL)的列表,並使用該列表爲我的測試部署創建一個副本文件列表。如何獲取我的進程加載的文件列表?

想到使用filemon,但有很多噪音。它是一個.net項目。

謝謝。

+1

Dupe of:http://stackoverflow.com/questions/383686/how-do-you-loop-through-currenlty-loaded-assemblies – GrayWizardx 2009-12-29 20:07:04

+0

@GrayWizardx那麼,爲什麼你不投票關閉它呢?這就是它應該如何工作。 – 2009-12-29 20:10:33

+0

我同意這個問題與我的觀點相同,儘管我想弄明白這個問題,但沒有將這個邏輯編碼到我的項目中。我還沒有看到這樣做的好方法 – TheSean 2009-12-29 20:46:07

回答

0

您應該能夠使用.NET的Reflection來分析您的應用程序AppDomain並轉儲加載的程序集和位置的列表。

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 
foreach (var assembly in loadedAssemblies) 
{ 
    Console.WriteLine(assembly.GetName().Name); 
    Console.WriteLine(assembly.Location); 
} 
+0

我認爲這是最好的答案,但不是我所期待的。我不想向我的項目添加代碼來完成此任務。但看起來會起作用。 – TheSean 2010-01-20 13:46:29

+0

請注意'GetAssemblies()'不會一致地工作,因爲它不是遞歸的,它會錯過任何嵌套的程序集引用。我在http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies/26300241#26300241上添加了'GetAssemblies()'的遞歸版本。 – Contango 2014-10-10 15:59:22

0

退房AppDomain.GetAssemblies

For Each Ass As Reflection.Assembly In CurrentDomain.GetAssemblies() 
    Console.WriteLine(Ass.ToString()) 
Next 
0

這在另一個question已經被回答。

它的要點是使用當前的應用程序域來獲取程序集列表並循環通過它們的加載程序位置。

1

Process Explorer?

+0

我這麼認爲......或者其他一些sysinternals的東西.. http://stackoverflow.com/questions/1980429/why-windows-7-isnt-written-in-c – monojohnny 2009-12-30 14:44:19

0

如果我已經理解了你的問題,爲了做一個快速部署,你可以在你的項目的所有引用中設置,但框架的設置「複製本地」爲true。

通過這種方式,當您構建應用程序時,您將在輸出目錄中擁有所有需要的DLL(幾乎所有引用所需的引用都不會自動複製,因此最好將它們添加爲本地引用太)。

希望這會有所幫助。如果沒有,只是說爲什麼,我會盡力繼續這一點。

+0

謝謝,希望它是簡單。我們的應用程序設計的方式是我們在運行時加載了很多引用。這是什麼讓它很難找出。我們基本上有一個包含數百個DLL的bin文件夾。我的項目只需要一個子集。我*可以*只是複製所有,但它的方式更多的MBs比我需要的。 – TheSean 2009-12-31 20:39:26

相關問題