我有一个VS 2005 / MSBuild 2.0项目(我们称之为“项目A”),我必须保留在VS 2005中(它使用第三方VS 2005 Designer。)项目A是在我的新VS 2008解决方案中的一个项目中引用(我们分别将它们称为“项目C”和“解决方案B”。)理想情况下,我想将项目A的构建链接到解决方案B的构建中,我相信“ToolsVersion”属性是关键。所以,回顾一下,这就是我需要做的事情:
这是一个图表:
MSBuild 3.5或VS2008->
[解决方案B(3.5)] - >
[项目C(3.5)] - >
[项目A(2.0)] - >
将A的输出复制到C->
继续构建解决方案B
关于如何设置它的任何想法?工作项目文件中的剪辑将非常感谢!提前谢谢!
解
以下是需要添加到Project 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而不是其解决方案文件的原因。
答案 0 :(得分:2)
在文本编辑器中编辑项目C的proj文件。在文件底部但在结束项目标记之前添加以下内容,其中a.sln是项目A的解决方案。
&LT;&的ItemGroup GT;
&lt; ProjectsToBuild Include =“a.sln”/&gt;
&LT; /&的ItemGroup GT;
&lt; Target Name =“BeforeBuild”&gt;
&LT;的MSBuild
项目= “@(ProjectsToBuild)”
Targets =“Build”ToolsVersion =“2.0”&gt;
&LT;输出
TaskParameter = “TargetOutputs”
ItemName =“AssembliesBuiltByChildProjects”/&gt;
&LT; / MSBuild的&GT;
&lt; Copy SourceFiles =“@(TargetOutputs)”
DestinationFolder = “@(SolutionDir)\参考”
/&GT;
&LT; /目标&GT;
在您的解决方案下创建一个参考文件夹,并确保将其标记为项目C的参考文件夹。
构建项目B。
我没有测试过,但这个概念应该有用。
答案 1 :(得分:1)
您还没有说明为什么需要在该项目上使用Visual Studio 2005的具体原因。 (我知道这样做是有正当理由的,但它们可能意味着不同的解决方案。)
我曾经成功做过的是在VS2008中设置二进制,包含和库路径以使用编译器和vs2005的包含(它是一个win32 c ++项目)。
您可以从编译器选项中删除/ nologo,以实际查看使用的编译器版本。
HOWTO:
将新转换的项目添加到2008解决方案,设置依赖项。
添加一个属性页面内容(不知道它是用英语调用的,它是一个.vsprops文件)到项目的<2008>版本,其中包含二进制,汇编和包含目录到2005年的安装,从而迫使vs2008为该项目使用2005工具集。 您可能需要专业版的vs2008来创建这样的文件,但所有版本都应该能够读取它。)
基本上,您将仅使用2008年的编辑器组件和2005年的编译器。
对此可能有更好的解决方案,但由于到目前为止您没有答案,我建议采用此解决方法。
答案 2 :(得分:1)
这个怎么样: 编辑项目C的proj文件以包含一个Exec MSbuild任务,该任务使用/ build开关调用VS2005 devenv来构建项目A,然后将项目A构建中的输出文件复制到项目C可以找到的位置。在项目C编译之前,您需要在项目C的proj文件中的构建步骤中执行,然后可以使用BeforeBuild,以便项目C可以找到项目A的输出。
答案 3 :(得分:1)
在VS2008中只是SLN格式不同,CSPROJ / VBPROJ文件“可以”保持不变... 所以基本上你需要两个SLN文件在两个SLN中添加你的CSPROJs / VBPROJ。