2

周りを見回した後、この問題に対する簡単な答えが見つかりません。

Visual Studio 2010 Express 内で SpecFlow と NUnit を簡単に使用できるように、MSBuild ファイルを作成しようとしています。

以下のファイルは完全ではありません。これは単なる概念実証であり、より一般的なものにする必要があります。

<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 を作成します。NUnit が使用できるように、.csproj をビルドするときにこのファイルを含める必要があります。

生成されたファイルを含めるために .csproj ファイルを (直接またはコピーで) 変更できることはわかっていますが、これは避けたいと思います。

私の質問は: MSBuild タスクを使用してプロジェクト ファイルをビルドし、ビルドに含める追加ファイルを含めるように指示する方法はありますか?

ありがとうございました。

4

2 に答える 2

3

プロジェクトファイルを編集せずにそれを行う方法が見つかりませんでした。

そこで、次の目的で MSBuild ファイルを作成しました。

  • プロジェクト ファイルをコピーする
  • コピーを SpecFlow で実行する
  • コピーしたプロジェクトに新しい .cs ファイルを追加する
  • プロジェクトをコンパイルする
  • NUnit を介してコンパイルされた各 DLL をデバッグ実行します。
  • クリーンアップ - コピーしたプロジェクトを削除します

ここでの使用方法についてブログに書きました:

http://learntdd.wordpress.com/2010/06/10/using-specflow-and-nunit-on-visual-studio-2010-express/

(バージョン1です、スクリプトを改善したいです)

于 2010-06-16T23:14:39.947 に答える
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 を消去します。

于 2010-06-14T18:42:58.553 に答える