我有一個文件名,例如我知道位於bin目錄中的庫「Foo.dll」。我想爲它創建一個Assembly對象。我試圖從不是頁面的類實例化這個對象,所以我沒有Request對象來獲取路徑。如何獲得我需要使用Assembly.Load()的路徑?在ASP.NET中從Bin加載程序集
回答
Assembly.Load不應該需要文件路徑,而是需要一個AssemblyName。如果您知道程序集位於標準搜索路徑(即bin目錄)中,則不需要知道程序集的磁盤路徑......只需知道其程序集名稱即可。在你的組件的情況下,假設你並不需要一個特定的版本,文化等等,集名稱應該僅僅是「富」:
Assembly fooAssembly = Assembly.Load("Foo");
如果您確實需要加載一個特定的版本,你將執行以下操作:
Assembly fooAssembly = Assembly.Load("Foo, Version=1.1.2, Culture=neutral");
一般情況下,要使用Assembly.Load,而不是Assembly.LoadFrom或Assembly.LoadFile。 LoadFrom和LoadFile在標準融合過程之外工作,並且可能導致程序集不止一次加載,從不安全位置加載等。Assembly.Load執行「標準」加載,搜索標準彙編位置,例如bin,GAC等等,並應用所有的標準安全檢查。
Assembly.LoadFile(...)是否工作?
呃,當然如果你知道絕對路徑。我想這是問題的重要部分。 – 2009-07-22 01:47:43
從您的描述中可以看出,這聽起來像是一個Web應用程序,所以除非您在異步線程中產生請求,否則您應該仍然可以訪問HttpContext
。從那裏你可以使用Server.MapPath()到你需要的文件。
我使用的一個完整示例,如果有幫助的話。資源是DLL庫(議會)的根目錄下的一個文件夾
public static string ReadAssemblyResourceFile(string resourcefilename)
{
using (var stream = Assembly.Load("GM.B2U.DAL").GetManifestResourceStream("GM.B2U.DAL.Resources."
+ resourcefilename)) {
if (stream == null) throw new MyExceptionDoNotLog($"GM.B2U.DAL.Resources.{resourcefilename} not found in the Assembly GM.B2U.DAL.dll !");
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
調用的函數:
[TestMethod()]
public void ReadAssemblyResourceFileTest()
{
var res = SetupEngine.ReadAssemblyResourceFile("newdb.sql");
Assert.IsNotNull(res);
}
PS。不要忘記將「Build Action」標記爲每個資源文件的「Embedded Resource」(在屬性窗口中)。
- 1. ASP.NET是否將所有程序集從bin中加載到AppDomain中?
- 2. 如何從/ bin目錄中加載所有程序集
- 3. 在asp.net中動態加載程序集
- 4. asp.net dynamicaly加載程序集
- 5. ASP.NET - bin目錄與在web.conf中添加程序集
- 6. IIS 7如何從Bin文件夾加載程序集
- 7. 如何停止ASP.NET在第一次加載時從bin加載所有程序集
- 8. ASP.NET將所有程序集加載到bin中以查找用戶控件
- 9. ASP.NET加載程序集從父應用程序
- 10. 動態加載ASP.NET核心程序集
- 11. 如何在我的web應用程序的bin目錄外加載程序集
- 12. MEF程序集從緩存中加載?
- 13. 從網絡中加載程序集
- 14. 從內存中加載程序集
- 15. 正在加載程序集
- 16. 在async中加載程序集任務asp.net
- 17. 在asp.net中混合模式程序集加載
- 18. 從路徑加載程序集而不將其複製到bin文件夾
- 19. Asp.Net 5:如何從project.json文件加載程序集的版本?
- 20. 未能從程序集加載類型 - ASP.NET核心
- 21. asp.net mvc從單獨程序集加載視圖
- 22. WPF:從程序集(dll)中加載ImageSource不是正在執行的程序集
- 23. 程序集加載順序
- 24. 在.NET Core中加載程序集
- 25. 防止在c中加載程序集#
- 26. 如何在app.config中加載程序集?
- 27. 在appdomain中加載程序集
- 28. 我如何從GAC加載程序集?
- 29. 從資源加載多個程序集
- 30. 從.NET加載WinRT程序集
或者,如果您已經在該程序集中有一個類型的對象 您可以執行如下操作:obj.GetType()。Assembly – 2009-07-22 08:41:17