环顾四周后,我找不到这个问题的简单答案。
我正在尝试创建一个MSBuild文件,以便我在Visual Studio 2010 express中轻松使用SpecFlow和NUnit。
下面的文件不完整,这只是一个概念验证,需要更加通用。
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildDependsOn>
BuildSolution;
SpecFlow;
BuildProject;
NUnit;
</BuildDependsOn>
</PropertyGroup>
<PropertyGroup>
<Solution>C:\Users\Craig\Documents\My Dropbox\Cells\Cells.sln</Solution>
<CSProject>C:\Users\Craig\Documents\My Dropbox\Cells\Configuration\Configuration.csproj</CSProject>
<DLL>C:\Users\Craig\Documents\My Dropbox\Cells\Configuration\bin\Debug\Configuration.dll</DLL>
<CSFile>C:\Users\Craig\Documents\My Dropbox\Cells\Configuration\SpecFlowFeature1.feature.cs</CSFile>
</PropertyGroup>
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
<Message Text="Build Started" Importance="high" />
<Message Text="Build Ended" Importance="high" />
</Target>
<Target Name="BuildSolution">
<Message Text="BuildSolution Started" Importance="high" />
<MSBuild Projects="$(Solution)" Properties="Configuration=Debug" />
<Message Text="BuildSolution Ended" Importance="high" />
</Target>
<Target Name="SpecFlow">
<Message Text="SpecFlow Started" Importance="high" />
<Exec Command='SpecFlow generateall "$(CSProject)"' />
<Message Text="SpecFlow Ended" Importance="high" />
</Target>
<Target Name="BuildProject">
<Message Text="BuildProject Started" Importance="high" />
<MSBuild Projects="$(CSProject)" Properties="Configuration=Debug" />
<Message Text="BuildProject Ended" Importance="high" />
</Target>
<Target Name="NUnit">
<Message Text="NUnit Started" Importance="high" />
<Exec Command='NUnit /run "$(DLL)"' />
<Message Text="NUnit Ended" Importance="high" />
</Target>
</Project>
SpecFlow任务查找.csproj文件并创建SpecFlowFeature1.feature.cs。 我需要在构建.csproj时包含此文件,以便NUnit可以使用它。
我知道我可以修改(直接或复制).csproj文件以包含生成的文件,但我更愿意避免这种情况。
我的问题是:有没有办法使用MSBuild任务来构建项目文件,并告诉它包含一个要包含在构建中的附加文件?
谢谢。
答案 0 :(得分:3)
如果没有编辑项目文件,我发现无法做到这一点。
所以我创建了一个MSBuild文件:
我在这里发表了关于如何使用它的博客:
http://learntdd.wordpress.com/2010/06/10/using-specflow-and-nunit-on-visual-studio-2010-express/
(这是版本1,我想改进脚本)
答案 1 :(得分:1)
如果没有对.csproj文件进行任何修改,我想不出任何方法。
我建议的方法看起来像这样。
在你的.csproj中Import
一个容器目标文件
...
<Import Project="SpecFlow.target" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
...
就在CSharp.targets之上。
Specflow.targets看起来像这样
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Include="@(Compile)" />
</ItemGroup>
</Project>
因此从VS构建项目时不会造成伤害。
然后,您可以使用 SpecFlow Exec
的输出并将其添加到SpecFlow.targets文件
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Include="@(Compile)" />
<Compile Include="SpecFlowFeature1.feature.cs" />
</ItemGroup>
</Project>
...
并在构建.csproj之后清理SpecFlow.targets。