C#自定义程序集目录

本文关键字:程序集 自定义 | 更新日期: 2023-09-27 18:22:11

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

图书馆或纸盒''库

我已经尝试在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>

附言:我的申请类型是表格申请。

C#自定义程序集目录

也许您想处理AppDomain AssemblyResolve事件。事实证明它对我来说是成功的。

我建议使用AppDomain.AssemblyResolve。事实上,如果文件的数量是你不喜欢的,你可以将它们作为资源嵌入到你的应用程序中,并直接从资源中加载。例如,请参阅Jeffrey Richter的CLR Via C#摘录:http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

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

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

请确保将事件添加到静态方法之外,否则它将不会编译。Libraries是我的可执行文件所在的子目录。你可以将其更改为任何名称,甚至可以添加另一个子目录。