我有一个文件名,如“Foo.dll,”为我所知道的是在bin目录库。 我想创建一个Assembly对象吧。 我试图从实例化一个类,这不是一个页面这个对象,所以我没有Request对象来获取路径。 我如何获得我需要使用Assembly.Load()的路径?
Answer 1:
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执行“标准”负载,搜索的标准装配位置,诸如纸槽,GAC等,并适用所有标准的安全检查。
Answer 2:
是否Assembly.LoadFile(...)工作?
Answer 3:
从你的描述听起来这是一个Web应用程序,所以,除非你是在你的要求催生了一个异步线程,你应该还是可以访问HttpContext
。 从那里,你可以使用使用Server.Mappath()到你需要的文件。
Answer 4:
一个完整的例子,因为我用,如果有帮助。 资源是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。 不要忘了“建设行动”,以纪念为每个资源文件“嵌入的资源”(在属性窗口)。
文章来源: Load an Assembly from Bin in ASP.NET