2012-02-20 64 views
-1

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

+0

将其复制到文件夹中。删除当前引用,然后转到参考 - >添加并导航到.dll位于的位置..这是一个问题..当你部署应用程序..你打算在目标计算机上创建一个文件夹,基于你将它放在本地..还是你要设置copy local = true ..?你有没有想过使用GAC,如果你正在移植到目标机器? – MethodMan 2012-02-20 19:08:47

+0

我已经尝试过......它将其复制到输出目录,或者,如果我将其关闭,则会在运行时发出错误。在目标机器上,它将具有带有exe的bin文件夹,然后是带有dll的lib文件夹。还有一些其他的东西,但现在并不重要。另外,我看过其他人发表的帖子,其中有人说你可以使用GAC,但这是一个非常糟糕的主意......所以如果没有这个可能,那会更好。 – Aidan 2012-02-20 19:15:32

回答

0

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

请注意,此属性仅适用于子目录o bin路径的目录,但看起来确实如此。

编辑

例子:

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

好运。

+0

好吧,这似乎是我需要的,但我在哪里放?对不起,我对这种东西不太好。在Main()函数顶部的Program.cs中,我将AppDomainSetup设置为appdomainsetup = new AppDomainSetup(); \t \t \t appdomainsetup.PrivateBinPath =“\\ lib \\”;但我如何使用该变量? – Aidan 2012-02-20 19:27:13

+0

@Aidan:结帐我编辑的评论 – Tigran 2012-02-20 19:39:01

+0

这是行不通的:/。我尝试打印出改变后改变的值,没有任何结果。所以,这意味着它不会更新该变量。我认为你需要做的是创建一个新的域并设置它。我想弄清楚现在怎么做...... – Aidan 2012-02-20 19:46:50

0

在开始加载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必须在同一个文件夹中...

相关问题