C# 启动CLR后如何设置程序集查找路径?
是否有一种方法(API函数)可以在启动CLR主机后设置C#程序集查找路径,以便函数找到它C# 启动CLR后如何设置程序集查找路径?,c#,c++,windows,clr,C#,C++,Windows,Clr,是否有一种方法(API函数)可以在启动CLR主机后设置C#程序集查找路径,以便函数找到它 提前谢谢。你可以这样做。基本上,每次找不到程序集的路径时都会调用AssemblyResolve事件。然后,您就有机会手动加载该程序集 AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); private System.Reflection.Assembly
提前谢谢。你可以这样做。基本上,每次找不到程序集的路径时都会调用
AssemblyResolve
事件。然后,您就有机会手动加载该程序集
AppDomain.CurrentDomain.AssemblyResolve +=
new ResolveEventHandler(CurrentDomain_AssemblyResolve);
private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender,
ResolveEventArgs args)
{
string name = args.Name;
//You can return null if you don't know how to load this assembly
return Assembly.LoadFrom(SomeFunction(name));
}
似乎只有指定程序集的位置
不幸的是,它们都不适用于这种情况。因此,要获得程序集目录和程序集名称的可能列表,需要手动定位文件,然后将完整路径传递给ExecuteInDefaultAppDomain()函数
但是,我仍然不明白为什么CLR api中没有提供这种功能(或者可能是,但没有正确记录)。谢谢您!但是,我正在寻找一种方法来设置程序集的路径(包含目标程序集的目录束),以便调用ExecuteInDefaultAppDomain()自动查找并加载它。在我的回答中添加了另一个选项CLR在(加载)程序集时不查看
path
环境变量。但是,有没有办法把探测目录传给它?嗯。。。所以在我的代码中可能是加载非托管DLL。。。对不起