gpt4 book ai didi

c# - 处理 AssemblyResolve 事件后仍然出现 FileNotFound 异常

转载 作者:行者123 更新时间:2023-11-30 14:31:55 25 4
gpt4 key购买 nike

我已经处理了 AssemblyResolve 事件,但我仍然收到 FileNotFoundException。我已经在类型初始值设定项中订阅了事件,并在 Main 方法中调用了 Assembly.LoadFrom 方法:

class Program
{
static Program()
{
AppDomain.CurrentDomain.AssemblyResolve+=new ResolveEventHandler(DeployAssemblyHandler);
}

static void Main(string[] args)
{
try
{
System.Reflection.Assembly asm=Assembly.LoadFrom("AxInterop.SHDocVw.dll");
}
catch(Exception)
{
}
}

public static System.Reflection.Assembly DeployAssemblyHandler(object sender,ResolveEventArgs args)
{
Assembly asm = null;
string asmName = new AssemblyName(args.Name).Name;

string deployAssemblyDirPath = ""; // Common.AppUtil.InstallDir + AppUtil.DeployedAssemblyDir;

string[] deployDirectories = Directory.GetDirectories(deployAssemblyDirPath);

foreach(string deploy in deployDirectories)
{
try
{
asm = Assembly.LoadFrom(deploy + "\\" + asmName);
break;
}
catch (Exception ex) { }
}
return asm;
}
}

最佳答案

我遇到了类似的问题并以使用新的 AppDomain 和(重要!)设置 PrivateBinPath 结束属性(property)。另一个 AppDomain 的好处是,如果您不再需要它,您可以卸载该程序集。 (我的)示例代码是:

  public class ProxyDomain : MarshalByRefObject
{
public bool TestAssembly(string assemblyPath)
{
Assembly testDLL = Assembly.LoadFile(assemblyPath);
//do whatever you need

return true;
}
}

AppDomainSetup ads = new AppDomainSetup();
ads.PrivateBinPath = Path.GetDirectoryName("C:\\some.dll");
AppDomain ad2 = AppDomain.CreateDomain("AD2", null, ads);
ProxyDomain proxy = (ProxyDomain)ad2.CreateInstanceAndUnwrap(typeof(ProxyDomain).Assembly.FullName, typeof(ProxyDomain).FullName);
bool isTdll = proxy.TestAssembly("C:\\some.dll");
AppDomain.Unload(ad2);

编辑:根据您的评论,您只是在寻找错误的事件处理程序。在您的情况下,您应该使用 AppDomain.UnhandledException事件,因为 AssemblyResolve Event 有不同的用途。

关于c# - 处理 AssemblyResolve 事件后仍然出现 FileNotFound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19250006/

25 4 0
文章推荐: c - 匹配C样式(单行)注释,并替换为 block 注释(Notepad++中的RegEx)
文章推荐: javascript - 如何在 SelectListActions 中添加复选框
文章推荐: javascript - 必需的 `