2011-11-19 29 views
3

我想查找在給定的.NET應用程序中使用的庫的完整路徑。.NET應用程序使用的解析庫路徑

這些都是,引用的程序集(如AssemblyName S取得)P /調用/DllImport ED功能(如剛纔所述的DLL名獲得)


所以基本上我在尋找這兩種方法的內容,其中executablePath是這可以從我的程序完全不同的第三方.NET應用程序的路徑。

static string ResolveAssemblyPath(AssemblyName name, string executablePath) 
{ 
    // ... 
} 

static string ResolveDllPath(string name, string executablePath) 
{ 
    // ... 
} 

,這些發現庫不決定其完整路徑的過程中執行任何代碼是很重要的!DllMain模塊初始化 ...)

是,即使可能在任何情況下?這不是一個猜錯的選擇。

+0

哦,一切都應該在_.NET4_客戶端配置文件下完成。 – ordag

+0

你有什麼理由不使用反射器或類似工具來反彙編他們的內容? – Yahia

+0

@Yahia - 這確實給了我像''kernel32.dll''或'「{mscorlib,Version = 4.0.0.0,[...]}'',我需要該庫的完整路徑。 _(這些只是可能被硬編碼的例子)_ – ordag

回答

1

這是可能的,但您需要複製windows加載程序的搜索順序,這對於本地和託管模塊甚至Windows版本都是不同的。我已經看到它在各種博客中發佈了不同級別的細節,但我手邊沒有任何細節。它似乎也記錄在MSDN,所以看看是否適合你。

無論如何,如果它不是一個猜錯的選項,你會有一個問題,因爲任何未來的Windows版本可以擴展或修改搜索順序,所以你將不會向上兼容未來的Windows版本。

也有規則重定向窗口加載程序,例如。通過清單或註冊表,如果您需要確切的覆蓋範圍,您還必須複製這些清單或註冊表。

相關問題