我有一个包含2个项目的VS 2008解决方案。项目A构建为项目B(MVC项目)使用的程序集。我在项目A中创建了一个自定义任务,我在构建项目B时调用它。
我遇到过两个问题:
那么方案1和2有什么问题。或者我应该在哪里指向AssemblyFile?如果做不到这一点,有没有更好的方法呢?
答案 0 :(得分:1)
如果你想彼此独立地构建这两个项目,那么就不能从VS输出目录中引用“A”程序集来构建它......
我将如何处理这种情况:
在trunk中我的projects文件夹的顶层创建一个依赖项文件夹.. ie:
然后,在projectA的构建任务中,将程序集复制到〜/ trunk / dependencies文件夹。
在projectB中,在〜/ dependencies文件夹中引用该程序集(以便生成.refresh文件)
这将允许您随意清理projectB,并且随时可以关闭“A”组件。
对于CI,我们使用JetBrains TeamCity并为我们的构建创建工件,然后构建任务根据需要引用这些工件。
答案 1 :(得分:1)
有几种方法可以定义项目的引用。
项目参考 - 这是一种更加集成的方法,因为VS将为您确定构建顺序。因此,当您构建项目B时,VS确定项目B依赖于项目A并将首先构建项目A并从其输出位置使用A的输出dll。使用项目引用的缺点是,当您想要将Project B包含在不同的解决方案中时,还必须包含项目A.
装配参考 - 您还可以直接定义装配参考。这听起来像是你正在使用的方法。在这种情况下,当您将项目B中的文件引用设置为项目A的/ bin中的ProjA.dll时,Visual Studio不知道它必须首先构建项目A才能创建ProjA.dll。您可以通过设置正确的“项目依赖项”来指示Visual Studio首先构建项目A.
为此,请在解决方案中加载ProjA和ProjB。假设您已经在方案2中定义了程序集引用,请右键单击项目B并选择“项目依赖项...”。在这里,您只需要在列表中的项目A旁边打勾。现在,当您清理并构建解决方案时,VS知道构建项目的顺序。
同样重要的是要注意“构建顺序”和“项目依赖性”是在解决方案级别定义的。因此,如果您创建一个不同的解决方案,并将依赖项目定义为文件引用,则必须为该新解决方案设置构建顺序。