SpecFlow误将JSON文件生成为.feature.cs文件的问题求助
解决SpecFlow错误将JSON文件生成为.feature.cs的问题
针对你遇到的分支重建后JSON文件被SpecFlowSingleFileGenerator误处理的问题,结合你的环境(VS2017、SpecFlow 2.2.1、MSTest、VSTS),可以按照以下步骤逐一排查解决:
1. 彻底清理本地文件关联与缓存
首先确保本地环境没有残留的错误配置:
- 打开VS2017,找到TestFiles目录下的JSON文件,右键选择属性,检查「自定义工具」字段是否被错误设置为
SpecFlowSingleFileGenerator,如果是,清空该字段或者设置为MSBuild:Compile(JSON文件无需自定义生成工具)。 - 用文本编辑器打开项目的
.csproj文件,全局搜索SpecFlowSingleFileGenerator,删除所有不属于.feature文件的<Generator>节点——确保只有.feature文件的条目里包含这个生成器配置。 - 清理解决方案:点击菜单「生成」→「清理解决方案」,然后手动删除项目的
bin、obj文件夹以及隐藏的.vs目录,重启VS后重新构建。
2. 修复VSTS构建的缓存问题
VSTS构建的工作区缓存可能保留了旧的生成规则,导致错误重复出现:
- 编辑你的VSTS构建定义,找到「获取源」步骤,勾选「清理本地工作区」,并将选项设置为始终(确保每次构建都彻底清理旧文件)。
- 如果清理工作区后仍有问题,可以在构建定义中添加一个「命令行」步骤,在构建前执行以下命令手动清理缓存:
rmdir /s /q $(Build.SourcesDirectory)\bin rmdir /s /q $(Build.SourcesDirectory)\obj
3. 明确锁定SpecFlow生成器的关联范围
为了从根源避免这类问题,在.csproj中明确指定只有.feature文件才使用SpecFlowSingleFileGenerator:
<ItemGroup> <!-- 确保生成的.feature.cs被正确编译 --> <Compile Include="**\*.feature.cs" /> </ItemGroup> <ItemGroup> <!-- 标记JSON文件为普通资源,不应用任何生成器 --> <None Include="**\*.json" /> <!-- 仅为.feature文件绑定SpecFlow生成器 --> <None Include="**\*.feature"> <Generator>SpecFlowSingleFileGenerator</Generator> <LastGenOutput>%(Filename).feature.cs</LastGenOutput> </None> </ItemGroup>
将这段代码添加到.csproj文件中,提交到VSTS仓库,确保构建时MSBuild只会处理正确的文件类型。
4. 验证VS的文件扩展名关联
最后检查VS的全局文件关联设置,防止JSON被错误关联到SpecFlow工具:
- 打开VS2017,点击「工具」→「选项」→「文本编辑器」→「文件扩展名」。
- 找到
.json扩展名,确认其关联的编辑器为「JSON编辑器」,如果不是,修改为正确的编辑器。
按照以上步骤操作后,本地和VSTS构建应该都不会再错误生成JSON对应的.feature.cs文件了。
内容的提问来源于stack exchange,提问作者KBNanda
相关产品推荐
相关产品推荐

