我有一个名为app1.exe的应用程序,它从一个名为CodeToCall.dll的DLL库中调用一个函数。在生产环境中,我的库位于另一个属于另一个程序的文件夹中。当我运行我的应用程序时,它会抛出以下异常:
未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'dllToCall,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件 at main(String [] args)
在mainCRTStartupStrArray(String [] arguments)
我引用的Dll可能正在使用某些库,但无法加载。
我试图在Windows PATH
中包含dll文件夹,但它没有成功,是引用dll的正确方法
我的CodeToCall.dll
代码:
public class Class1
{
public void Some()
{
Console.WriteLine("HI");
}
}
我的app1.exe
,当我添加codeToCall.dll
:
int main(array<System::String ^> ^args)
{
//PCWSTR wcstr = L"C:\Program Files(x86)\Sigma"
Console::WriteLine(L"Hello World");
dllToCall::Class1^ obj = gcnew class dllToCall:Class1;
obj->Some();
Console::ReadKey();
return 0;
}
答案 0 :(得分:0)
您可以通过订阅AppDomain::AssemblyResolve事件从任意文件夹加载程序集。装配分辨率的一个很好的概述是here。
简而言之:
AppDomain::AssemblyResolve
事件将会触发。Assembly::LoadFrom
成功,它将返回新加载的程序集的句柄。您必须从AssemblyResolve事件处理程序返回该句柄。(您可能很想在您的应用首次启动时直接致电Assembly::LoadFrom
,但仅此一项不起作用 - 您必须从{返回程序集的句柄{1}}处理程序。)
示例:
AppDomain::AssemblyResolve