3

我有一个 C# 应用程序,它使用另一个 C# DLL。如果我使用 exe 文件,它可以工作,当 DLL 文件与 exe 文件位于同一目录中时。但知道我会创建一个文件夹并将 dll 文件放入其中。在 MSDN 帮助中找到了一些应该工作的东西,但我不知道为什么?

如何从子文件夹中加载 DLL?

4

2 回答 2

5

您需要将要从中加载 dll 的文件夹添加到配置文件中:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="YourSubFolderHere;SubFolderTwo"/>
    </assemblyBinding>
</runtime>

或者你可以通过代码使用

AppendPrivatePath

更多关于msdn中的探测路径

于 2012-07-11T08:18:00.810 回答
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);
                }
            };
    }
于 2012-07-11T08:36:50.610 回答