我有一个C#-application,它使用另一个C#DLL。 如果我使用exe文件它可以工作,当DLL-File与exe-File在同一目录中时。但是知道我会创建一个文件夹并将dll-File放入其中。 在MSDN帮助中找到了应该有用的东西,但我不知道为什么?
如何将DLL加载到子文件夹中?
答案 0 :(得分:5)
您需要将要加载dll的文件夹添加到配置文件中:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="YourSubFolderHere;SubFolderTwo"/>
</assemblyBinding>
</runtime>
或者您可以通过代码using执行此操作:
AppendPrivatePath
更多关于msdn
中的探测路径答案 1 :(得分:0)
如果您想要更多的灵活性,您可以简单地处理自己解决的程序集。这样您就可以完全控制加载哪些代码。这是我的一个项目中的一些代码。
'new AssemblyName(args.Name)'提供了一个对象,您可以使用该对象获取有关所需程序集的信息,其余代码从嵌入文件加载程序集。如果要从子文件夹加载程序集,可以使用Assembly.Load()。
private static void InstallAssemblyResolveHandler()
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
}