【问题标题】:C# Get DLL out of a SubfolderC# 从子文件夹中获取 DLL
【发布时间】:2012-07-11 17:14:06
【问题描述】:

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

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

【问题讨论】:

标签: c# dll


【解决方案1】:

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

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

或者您可以通过代码using 来实现:

AppendPrivatePath

更多关于msdn中的探测路径

【讨论】:

  • 好的...到目前为止还可以。但是我的配置文件是什么?我只能找到一个app.config...
  • 如果您右键单击解决方案中的项目添加 => 新项目 => 常规 => 应用程序配置文件。然后只需添加我在 之间发布的行。谷歌应用程序配置文件了解更多信息。
【解决方案2】:

如果您想要更多的灵活性,您可以简单地处理自己解决的程序集。这样您就可以完全控制加载哪些代码。这是我的一个项目中的一些代码。

'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);
                }
            };
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多