2012-01-26 81 views
2

我得到了以下的编译文件夹(简体):加载库的相对路径?

D:\MySolution\Project1\bin\Debug 
D:\MySolution\Project2\bin\Debug 

Project1Project2一个参考,但在代码中,我必须加载从PROJECT1一类,所以我用这个代码的工作原理:

var project2ref = Assembly.LoadFrom(@"..\..\..\Project1\bin\Debug\Project1.dll") 
           .CreateInstance("MyNamespace.MyClass"); 

这适用于VS,但在使用我的软件的安装版本时会崩溃... 相对路径的替代方法是什么?

+1

为什么不在项目资源管理器中的“引用”下添加引用,从'project1'引用'project2'? –

+0

最有可能您的安装文件夹没有bin \ Debug子文件夹,是吗? –

+0

Project1已经在Project2上使用了一个引用(使用一个接口),所以我不能在Project1中引用Project2(循环依赖) –

回答

7

当您构建解决方案时,您会将project1的dll放入project2的bin文件夹中。 因此,您可以通过检索project1.dll的程序集路径来获取project2.dll的引用。下面的代码将在project1中执行,并将获得包含dll的项目的bin路径。

System.Reflection.Assembly.GetExecutingAssembly().Location 
+1

否,因为Project2在Project1上没有引用!我无法添加此refenrece(请参阅我的问题的评论) –

+1

对不起,我误解了这个问题。如果你面临这个问题,那是因为设计错误(你反正通过反射来加载project1来创建循环依赖)。最好的选择是将你在project1中需要的代码移动到一个单独的项目中,并将其作为正常的依赖项引用。 –