【问题标题】:How can I generate specflow feature.cs files with msbuild?如何使用 msbuild 生成 specflow feature.cs 文件?
【发布时间】:2017-02-27 09:19:23
【问题描述】:

我正在尝试将 specflow 与 CI 一起使用,并且必须将生成的 .cs 文件检查到源代码管理中似乎是错误的。

我尝试编辑 .csproj 文件以在 feature.cs 文件的Compile 步骤中设置<BeforeBuild>True</BeforeBuild>,但似乎没有什么区别。我能找到重新生成 .feature.cs 文件的唯一方法是使用 Visual Studio,但我想在 CI 构建服务器上使用 msbuild。

我还尝试添加AfterUpdateFeatureFilesInProject 目标,如specflow doc 所述,但这也没有创建 .feature.cs 文件,无论 .csproj 文件中是否包含 .feature.cs 文件。

This question 建议阅读 MSDN 上的“指定自定义构建工具”,但我看不到任何有用的内容。schema definition for msbuild on MSDN 甚至没有提到 Compile 元素 AFAICT。)

【问题讨论】:

    标签: .net visual-studio msbuild bdd specflow


    【解决方案1】:

    我按照以下说明操作 http://specflow.org/documentation/Generate-Tests-from-MsBuild/,但是有一些缺失的步骤。

    1. 将 SpecFlowTasksPath 属性设置为 specflow.exe 的位置
    2. 导入 TechTalk.SpecFlow.tasks
    3. 导入 TechTalk.SpecFlow.targets

    这些路径应该是相对路径,我指向 NuGet packages\ 文件夹,我在该文件夹中为我的项目引用 SpecFlow。

    此外,我在 AfterUpdateFeatureFilesInProject 目标中添加了一个步骤,将生成的文件移动到已知位置,以便轻松查看它们。此文件夹在我的 GIT 存储库中被忽略。

      <PropertyGroup>
        <SpecFlowTasksPath>..\packages\SpecFlow.2.2.0\tools\specflow.exe</SpecFlowTasksPath>
      </PropertyGroup>
      <Import Project="..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.tasks"  Condition="Exists('..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.tasks')" />
      <Import Project="..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets" Condition="Exists('..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets')" />
      <Target Name="AfterUpdateFeatureFilesInProject">
        <Move SourceFiles="@(SpecFlowGeneratedFiles)" DestinationFolder="Features.Generated" OverwriteReadOnlyFiles="true" />
        <ItemGroup>
          <!-- include any files that specflow generated into the compilation of the project -->
          <Compile Include="Features.Generated\**\*.cs">
            <Visible>true</Visible>
            <!-- the generated files can be hidden in Visual Studio -->
          </Compile>
        </ItemGroup>
      </Target>
    

    【讨论】:

      【解决方案2】:

      您可以在此处找到使用 MSBuild 生成代码隐藏文件的文档:http://specflow.org/documentation/Generate-Tests-from-MsBuild/

      【讨论】:

      • 啊,是的,我忘了说我看过那个页面,但没有效果;我会更新我的问题。
      • 好吧,奇怪。那应该行得通。我在各种项目和 SpecFlow 本身中都做过多次。请参阅此处:github.com/techtalk/SpecFlow/blob/master/Tests/…
      • 我尝试添加导入,但它仍然没有生成 .cs 文件,这听起来比文档所述的“仅在项目文件末尾添加一行”多一点!我会抓住你的 github,看看它对我的项目有什么不同。
      • 仅供参考,上面的链接指向 @AndreasWillich 的 repo 的主分支,并且在附加提交后行号关闭。正如他所说,您正在寻找 行,特别是那些导入 echTalk.SpecFlow.tasks 和 echTalk.SpecFlow.targets 的行。我发现还有一些额外的步骤,看我的回答。
      猜你喜欢
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2018-02-08
      相关资源
      最近更新 更多