如何解决错误MSB4041(VS2017,C#,MSBuild,SpecFlow.Tools.MsBuild.Generation,SpecRun)?

时间:2019-07-08 10:55:52

标签: c# msbuild visual-studio-2017

我有一个自动化测试套件,尝试使用SpecRun并行运行测试。似乎不是能够在Test Explorer中运行测试,而是需要使用提供的“ runtests.cmd”文件来运行它们...

@pushd %~dp0

@where /q msbuild

@IF ERRORLEVEL 1 (
    echo "MSBuild is not in your PATH. Please use a developer command prompt!"
    goto :end
) ELSE (
    MSBuild.exe "C:\Users\me\source\repos\OurAutomation\src\OurAutomation.csproj"
)

@if ERRORLEVEL 1 goto end

@cd ..\packages\SpecRun.Runner.*\tools\net45

@set profile=%1
@if "%profile%" == "" set profile=Default

@if exist "%~dp0\bin\Debug\%profile%.srprofile" (
    SpecRun.exe run "%profile%.srprofile" --baseFolder "%~dp0\bin\Debug" --log "specrun.log" %2 %3 %4 %5
) else (
    SpecRun.exe run --baseFolder "%~dp0\bin\Debug" --log "specrun.log" %2 %3 %4 %5
)

:end

@popd

pause

...我添加了pause语句,以保持控制台打开以查看错误。

错误是:

Microsoft (R) Build Engine version 4.7.3056.0
[Microsoft .NET Framework, version 4.0.30319.42000]
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 08/07/2019 11:15:06.
Project "C:\Users\me\source\repos\OurAutomation\src\OurAutomation.csproj" on node 1 (defau
lt targets).
C:\Users\me\source\repos\OurAutomation\src\packages\SpecFlow.Tools.MsBuild.Generation.3.0.220\build\Sp
ecFlow.Tools.MsBuild.Generation.props(1,1): error MSB4041: The default XML namespace of the project must be the MSBuild
 XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/d
eveloper/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please
convert it to MSBuild 2003 format. [C:\Users\me\source\repos\OurAutomation\src\OurAutomati
on.csproj]
Done Building Project "C:\Users\me\source\repos\OurAutomation\src\OurAutomation.csproj" (d
efault targets) -- FAILED.


Build FAILED.

"C:\Users\me\source\repos\OurAutomation\src\OurAutomation.csproj" (default target) (1) ->
  C:\Users\me\source\repos\OurAutomation\src\packages\SpecFlow.Tools.MsBuild.Generation.3.0.220\build\
SpecFlow.Tools.MsBuild.Generation.props(1,1): error MSB4041: The default XML namespace of the project must be the MSBui
ld XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com
/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, pleas
e convert it to MSBuild 2003 format. [C:\Users\me\source\repos\OurAutomation\src\OurAutoma
tion.csproj]

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.02

我已将系统环境变量PATH设置为在C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319(这是我拥有的最新版本)中查找MSBuild.exe。

我尝试按照错误提示进行操作,发现OurAutomation.csproj和OurAutomation.csproj.user文件已经具有:

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

这就是简单的解决方法-根本没有解决方法,因为Project标记已经具有必需的属性和值!

我去过几个网站,寻找替代解决方案。其他人则说从VS2015升级到2017时遇到了这个问题(它们从使用project.json更改为* .csproj)。但是我还没有升级。我在VS2017中创建了我的项目。目标框架:.NET Framework 4.7.2,输出类型:类库。

不确定SpecFlow.Tools.MsBuild.Generation是否在此处引入冲突,但是我确实需要它。

请您知道我将如何解决此问题?没了主意。

谢谢。

1 个答案:

答案 0 :(得分:0)

Pavel Anikhouski的答案是解决方案,谢谢!

“从Visual Studio 2015开始,MSBuild作为IDE(或构建工具)的一部分提供,您应使用此版本,例如c:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \”。