C#自定义程序集目录

C#自定义程序集目录,c#,dll,assemblies,sharpdx,C#,Dll,Assemblies,Sharpdx,我已经在线寻找了至少3-4个小时,试图找出如何设置自定义程序集目录。所以我有很多来自SharpDX的DLL文件,但是它们都和可执行文件在同一个目录中,但是我想把它们放在一个子目录中,比如 图书馆 或 Bin\Libraries 我已经尝试在app.config文件中使用探测,但没有成功。不过,我是这样设置的 <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup>

我已经在线寻找了至少3-4个小时,试图找出如何设置自定义程序集目录。所以我有很多来自SharpDX的DLL文件,但是它们都和可执行文件在同一个目录中,但是我想把它们放在一个子目录中,比如

图书馆 或 Bin\Libraries

我已经尝试在app.config文件中使用探测,但没有成功。不过,我是这样设置的

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="Libraries" />
        </assemblyBinding>
    </runtime>
</configuration>
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
{
    Assembly ass = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "\\Libraries\\" + e.Name.Split(new char[] { ',', ' ' })[0] + ".dll");
    return ass;
}


另外,我的应用程序类型是表单应用程序。

也许您想处理AppDomain AssemblyResolve事件。事实证明,它对我很成功。

我建议使用。事实上,如果文件的数量是您不喜欢的,您可以将它们作为资源嵌入到应用程序中,并直接从资源中加载它们。例如,请参阅Jeffrey Richter通过C#编写的CLR摘录:

我已经了解了AssemblyResolve事件的作用和方式。我现在发布这篇文章是为了那些和我有同样问题的人。因此,此事件所做的是,如果它找不到程序集,则此事件将告诉它到其他地方查找它们。下面是如何设置它

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="Libraries" />
        </assemblyBinding>
    </runtime>
</configuration>
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
{
    Assembly ass = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "\\Libraries\\" + e.Name.Split(new char[] { ',', ' ' })[0] + ".dll");
    return ass;
}

确保从静态方法中添加事件,否则它将无法编译。库是我的可执行文件所在的子目录。您可以将其更改为任何名称,甚至可以根据需要添加另一个子目录。

您能解释一下,并给出一个示例吗?很长时间没和C#在一起了。