我有一个 C# 应用程序,它使用另一个 C# DLL。如果我使用 exe 文件,它可以工作,当 DLL 文件与 exe 文件位于同一目录中时。但知道我会创建一个文件夹并将 dll 文件放入其中。在 MSDN 帮助中找到了一些应该工作的东西,但我不知道为什么?
如何从子文件夹中加载 DLL?
您需要将要从中加载 dll 的文件夹添加到配置文件中:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="YourSubFolderHere;SubFolderTwo"/>
</assemblyBinding>
</runtime>
或者你可以通过代码使用:
AppendPrivatePath
更多关于msdn中的探测路径
如果您想要更多的灵活性,您可以简单地处理自己解决的程序集。这样您就可以完全控制加载哪些代码。这是我的一个项目中的一些代码。
'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);
}
};
}