我有一个文件名,例如我知道位于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. 如何从/ bin目录中加载所有程序集
- 2. 在asp.net中动态加载程序集
- 3. ASP.NET - bin目录与在web.conf中添加程序集
- 4. IIS 7如何从Bin文件夹加载程序集
- 5. 如何停止ASP.NET在第一次加载时从bin加载所有程序集
- 6. ASP.NET将所有程序集加载到bin中以查找用户控件
- 7. ASP.NET加载程序集从父应用程序
- 8. 动态加载ASP.NET核心程序集
- 9. 从内存中加载程序集
- 10. 从网络中加载程序集
- 11. 正在加载程序集
- 12. 在async中加载程序集任务asp.net
- 13. 未能从程序集加载类型 - ASP.NET核心
- 14. WPF:从程序集(dll)中加载ImageSource不是正在执行的程序集
- 15. 在.NET Core中加载程序集
- 16. 如何在app.config中加载程序集?
- 17. C#:如何从GAC加载程序集?
- 18. 我如何从GAC加载程序集?
- 19. 无法从程序集加载任务
- 20. 如何从c#加载C++程序集?
- 21. 从.NET加载WinRT程序集
- 22. 权限在运行时加载程序集在ASP.NET MVC
- 23. 如何在ASP.net应用程序的bin文件夹外引用程序集?
- 24. ASP.NET腐败的程序集“无法加载文件或程序集App_Web_ *”
- 25. .NET程序集加载
- 26. 无法加载程序集
- 27. IIS7未加载程序集
- 28. 程序集Microsoft.Xna.Framework.dll不加载
- 29. 仅加载程序集
- 30. 在ASP.NET MVC 2应用程序中从jQuery重新加载PartialView?
或者,如果您已经在该程序集中有一个类型的对象 您可以执行如下操作:obj.GetType()。Assembly – 2009-07-22 08:41:17