在運行時,我想加載一個程序集,並且需要找到它的依賴程序集的名稱,以便我可以確定執行給定的DLL文件需要哪些程序集。如何加載DLL文件以確定其相關的程序集名稱?
-3
A
回答
5
您需要將程序集(DLL文件)加載到Reflection-Only context中。
之後,您可以使用GetReferencedAssembles
找到依賴關係。
4
我的代碼討厭有點用這種前段時間:
如果您加載程序集,註冊決心事件:
AppDomain.CurrentDomain.AssemblyResolve += Assemblies_AssemblyResolve;
Assembly.LoadFile("<path to your assembly>");
AppDomain.CurrentDomain.AssemblyResolve -= Assemblies_AssemblyResolve;
的決心事件處理程序被調用每一個被引用的DLL。這裏我嘗試加載程序集。
Assembly Assemblies_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.RequestingAssembly != null)
{
return LoadAssemblyFromPath(new AssemblyName(args.Name), args.RequestingAssembly.Location);
}
if (assemblyTryPath != null)
{
return LoadAssemblyFromPath(new AssemblyName(args.Name), assemblyTryPath);
}
return null;
}
而一個小幫手,其中實際裝載情況:
private Assembly LoadAssemblyFromPath(AssemblyName assemblyName,string fullPath)
{
if (assemblyName == null||fullPath==null)
return null;
string path = Path.GetDirectoryName(fullPath);
string dllName = assemblyName.Name + ".dll";
string fullPath2Try = Path.Combine(path, dllName);
Assembly loadedAssembly = Assembly.LoadFrom(fullPath2Try);
return loadedAssembly;
}
希望,可以幫助!
+0
這兩個'else'關鍵字都是多餘的,因爲你在'if'情況下有'return'語句。也就是說'else {'和它的伴隨'}'可以被刪除。這當然是一個編碼口味的問題,但我享受無巢代碼 – Default
+0
你是完全正確的!這是一個遺留下來的時代,代碼沒有被分解到很好的小方法(我仍在試驗)。將更新答案 – PrinceCharles
0
我找到答案。如果我們想要找到卸載程序集的引用程序集,我們可以從以下方式找到。
Assembly _Assembly = Assembly.ReflectionOnlyLoadFrom(@"H:\Account.dll");
AssemblyName[] _AN = _Assembly.GetReferencedAssemblies();
相關問題
- 1. 如何加載相關程序集?
- 2. 如何使用強名稱簽署.NET程序集DLL文件?
- 3. 如何確定加載我的DLL的DLL(字符串)的名稱?
- 4. 應用程序如何加載不帶名稱的DLL?
- 5. 文件或程序集名稱****。dll或其未找到的依賴項
- 6. 如何確定Assembly.LoadFrom確實加載了一個DLL文件?
- 7. 確定加載的程序集
- 8. 加載程序集鎖定文件
- 9. 由程序集定義的列表類型不加載相關程序集
- 10. VSIX - 無法加載引用的dll的文件或程序集
- 11. PowerShell如何加載二進制模塊的相關程序集?
- 12. 如何確定程序集名稱是否與請求的部分程序集名稱匹配
- 13. 48加載DLL,MSADO相關
- 14. 無法加載文件或程序集「***。dll」或它的某個依賴關係
- 15. 試圖從其文件夾中加載dll的應用程序
- 16. 如何從類型名稱和程序集名稱中加載一個類型
- 17. 從特定路徑加載強名稱程序集?
- 18. 如何用程序集名稱命名log4net輸出文件?
- 19. 如何加載在Objective-C中返回程序集的.dll文件?
- 20. 程序集名稱和文件名可以不同嗎?
- 21. 如何動態加載引用不同版本的相同程序集的DLL?
- 22. 無法加載文件或程序集「SharpSvn-DB44-20-Win32.dll」
- 23. 錯誤消息:無法加載文件或程序集'Microsoft.Expression.Encoder.Api2.dll'
- 24. 將程序集加載到子AppDomain併發布dll文件
- 25. C#無法從發佈DLL加載文件或程序集
- 26. 如何從程序集的限定名稱中提取程序集全名?
- 27. 我可以強制程序在鏈接到強名稱程序集時加載弱命名程序集嗎?
- 28. ASP加載程序集(dll)錯誤
- 29. 如何以程序方式加載資源名稱?
- 30. 無法加載文件或程序集「Microsoft.SqlServer.BatchParserClien.dll文件名
我猜你將需要檢查['GetReferencedAssemblies'](http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getreferencedassemblies%28v=vs.90% 29.aspx) – V4Vendetta
Thanx重播。但我的問題是,我有一個程序集Account.dll和m使用另外四個程序集作爲參考程序集。如果我只向其他人提供Account.dll,那麼其他人怎麼知道哪個程序集需要加載Account.dll –
因此,你根本沒有閱讀過鏈接文檔,是否。 –