【发布时间】:2009-04-23 17:16:55
【问题描述】:
我有一个 VS 2005/MSBuild 2.0 项目(我们称之为“项目 A”),我必须保留在 VS 2005 中(它使用第三方 VS 2005 设计器。)项目 A 是由我的新 VS 2008 解决方案中的一个项目引用(我们将分别称它们为“项目 C”和“解决方案 B”。)理想情况下,我想将项目 A 的构建链接到解决方案 B 的构建中,我相信“ToolsVersion”属性是关键。所以,回顾一下,这就是我需要做的:
- 通过命令行或 Visual C# 2008 Express 在解决方案 B 上开始构建。它通过两者工作是至关重要的!
- 让项目 C 触发项目 A 的构建。
- 将项目 A(类库)的输出复制到项目 C。
- 构建项目 C 和解决方案 B 中的其余项目。
这是一个图表:
MSBuild 3.5 或 VS2008->
[解决方案 B (3.5)]->
[项目 C (3.5)]->
[项目 A (2.0)]->
将 A 的输出复制到 C->
继续构建解决方案 B
关于我应该如何设置的任何想法?来自工作项目文件的剪辑将不胜感激!提前致谢!
解决方案
以下是项目 C 中需要添加的内容,以使其工作:
<ItemGroup>
<ProjectToBuild Include="..\ProjectA\ProjectA.csproj" />
</ItemGroup>
<Target Name="BeforeBuild">
<MSBuild
Projects="@(ProjectToBuild)"
Targets="Rebuild" ToolsVersion="2.0">
<Output
TaskParameter="TargetOutputs"
ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
<Copy SourceFiles="@(AssembliesBuiltByChildProjects)"
DestinationFolder="$(MSBuildProjectDirectory)"
/>
</Target>
请注意,有一个known issue 用于通过 MSBuild 任务获取解决方案的 TargetOutputs。这应该在 MSBuild 3.5 中得到修复,但我猜是 ToolsVersion 属性导致它重新出现。这就是我直接引用 ProjectA.csproj 而不是它的解决方案文件的原因。
【问题讨论】:
-
为什么项目 A 必须使用解决方案 B 构建?您不能只引用项目 A 程序集以及解决方案 B 中的其他依赖项吗?
-
当然。但是,如果我可以进行此设置(并且我很确定这是可能的),我可以让我的构建服务器和我的开发人员立即知道项目 A 中的更改是否破坏了项目 C。
标签: visual-studio-2008 visual-studio-2005 msbuild