【问题标题】:Visual Studio - Load References Outside Compile FolderVisual Studio - 在编译文件夹外加载引用
【发布时间】:2012-02-20 19:05:44
【问题描述】:

我正在使用 Visual Studio 制作 C# 程序。我有一个正在加载的第 3 方 Dll。它可以工作,但我希望它位于编译目录的子目录中。 (Release\lib\ 而不是 Release)。我可以使用 exe.config 文件执行此操作,但我不希望用户能够更改程序查找 Dll 的位置。那么,如何在不使用 exe.config 的情况下引用子目录中的 Dll?

【问题讨论】:

  • 将其复制到文件夹.. 删除当前引用,然后转到引用 -> 添加并导航到 .dll 现在所在的位置.. 这是一个问题.. 当您部署应用程序时。 . 你是要根据你在本地的位置在目标机器上创建一个文件夹.. 还是你要设置 copy local = true ..?如果您要移植到目标机器,您是否考虑过使用 GAC..????
  • 我已经尝试过了...它要么将其复制到输出目录,要么,如果我将其关闭,则会在运行时出错。在目标机器上,它将有一个带有 exe 的 bin 文件夹,然后是一个带有 dll 的 lib 文件夹。还有一些其他的东西,但现在不重要。另外,我看过其他帖子,有人说你可以使用 GAC,但这是一个非常糟糕的主意......所以如果没有它可以做到这一点,那就更好了。

标签: c# visual-studio-2010 reference subdirectory


【解决方案1】:

我认为您需要为您的域设置AppDomainSetup.PrivateBinPath 属性。 在此属性中指定参考程序集所在的文件夹路径(如果有多个以“;”分隔)。通过这种方式,您可以对程序集进行标记,以查找指定目录以获取所需的引用。

请注意,此属性仅适用于目录,即 bin 路径的子目录,但似乎正是您的情况。

编辑

例子:

 AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path1;path2;...";

祝你好运。

【讨论】:

  • 好的,这似乎是我需要的,但我应该把它放在哪里呢?对不起,我不擅长这种东西。在 Main() 函数顶部的 Program.cs 中,我将 AppDomainSetup appdomainsetup = new AppDomainSetup(); appdomainsetup.PrivateBinPath = "\\lib\\";但是我该如何使用那个变量呢?
  • 那行不通:/。我尝试在更改后立即打印更改的值,但没有任何结果。因此,这意味着它不会更新该变量。我认为您要做的是创建一个新域并进行设置。我现在正在尝试弄清楚如何做到这一点....
  • @Aidan:你在说什么变量?
  • AppDomain.CurrentDomain.SetupInformation.PrivateBinPath。我将它设置为“\\lib\\”(两个\\作为转义),但它没有帮助(它仍然没有在lib文件夹中找到dll)。所以就在我将 PrivateBinPath 设置为“\\lib\\”的位置下方,我安慰了 PrivateBinPath。它是空白的 - 这意味着它没有正确设置。我尝试了其他一些方法来设置它,但没有任何效果。
  • @Aidan:不要将relative,而是absolute路径放入该属性
【解决方案2】:

在开始加载 dll 之前指定 PrivateBinPath 很重要。

static class Program
{
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path";
        Application.Run(new Form1());
    }
}

如果应用程序文件夹中的 dll 需要我们指定的 PrivateBinPath 文件夹中的另一个 dll,它将无法工作。所有 dll 必须在同一个文件夹中...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多