【问题标题】:C# Custom Assembly DirectoryC# 自定义程序集目录
【发布时间】:2014-09-17 02:16:45
【问题描述】:

我一直在网上寻找至少 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# dll assemblies sharpdx


    【解决方案1】:

    也许您想处理 AppDomain AssemblyResolve 事件。这对我来说是成功的。

    【讨论】:

    • 你能解释一下,并举个例子吗?很久没有接触C#了。
    【解决方案2】:

    我建议使用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

    【讨论】:

      【解决方案3】:

      我已经了解了 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;
      }
      

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

      【讨论】:

        猜你喜欢
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多