加载后删除程序集
Delete an assembly after loading
我正在尝试使用以下代码加载 MSIL 程序集:
string PathOfDll = "PathOfMsILFile (Dll)";
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom(PathOfDll);
在这个程序结束时我应该删除这个文件:
File.Delete(PathOfDll);
它会导致错误:'System.UnauthorizedAccessException'
Additional information: Access to the path 'Path' is denied .
它与 UAC 无关,只是因为我在程序开始时加载程序集,当我想手动删除它时,它说该文件正在 vshost.exe 中使用。所以我这么说只是为了说明它是为了组装加载!
那么有没有办法摆脱它(比如卸载这个程序集)?
注意:我正在为 运行 垃圾收集器编写代码,但此问题仍未解决。
谢谢。
一种可能的方法是:使用 Load
代替 LoadFrom
,如下所示。
Assembly asm = null;
try
{
asm = Assembly.Load(File.ReadAllBytes(path));
}
catch(Exception ex)
{
}
接受的答案有内存泄漏问题。在深层,汇编二进制文件被加载到内存中,直到您的应用程序退出才会被释放。
我更喜欢使用 AppDomain,它允许 GC 在使用后进行清理。
示例代码由 Rene de la garza at
提供
简述:
AppDomain dom = AppDomain.CreateDomain("some");
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = pathToAssembly;
Assembly assembly = dom.Load(assemblyName);
//Do something with the loaded 'assembly'
AppDomain.Unload(dom);
我正在尝试使用以下代码加载 MSIL 程序集:
string PathOfDll = "PathOfMsILFile (Dll)";
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom(PathOfDll);
在这个程序结束时我应该删除这个文件:
File.Delete(PathOfDll);
它会导致错误:'System.UnauthorizedAccessException'
Additional information: Access to the path 'Path' is denied .
它与 UAC 无关,只是因为我在程序开始时加载程序集,当我想手动删除它时,它说该文件正在 vshost.exe 中使用。所以我这么说只是为了说明它是为了组装加载!
那么有没有办法摆脱它(比如卸载这个程序集)?
注意:我正在为 运行 垃圾收集器编写代码,但此问题仍未解决。
谢谢。
一种可能的方法是:使用 Load
代替 LoadFrom
,如下所示。
Assembly asm = null;
try
{
asm = Assembly.Load(File.ReadAllBytes(path));
}
catch(Exception ex)
{
}
接受的答案有内存泄漏问题。在深层,汇编二进制文件被加载到内存中,直到您的应用程序退出才会被释放。
我更喜欢使用 AppDomain,它允许 GC 在使用后进行清理。 示例代码由 Rene de la garza at
提供简述:
AppDomain dom = AppDomain.CreateDomain("some");
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = pathToAssembly;
Assembly assembly = dom.Load(assemblyName);
//Do something with the loaded 'assembly'
AppDomain.Unload(dom);