C#从子文件夹中获取DLL

时间:2012-07-11 08:13:07

标签: c# dll

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

如何将DLL加载到子文件夹中?

2 个答案:

答案 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);
                }
            };
    }