TFS 2017 - 错误 MSB4126:指定的解决方案配置 "dev|any cpu" 无效
TFS 2017 - Error MSB4126: The specified solution configuration "dev|any cpu" is invalid
这个问题似乎很普遍,但我还没有找到一致的解决方案。
我正在使用 VS2017 和 TFS2017 构建一整套 4.6.1 class 库 - 有些是 nugets,有些是插件 - 我无法构建其中一个项目,尽管使用与之前所有项目相同的方法。
我们使用 "Any CPU" 平台和 "dev"、"test"、"train" 或 "prod" 的配置构建我们所有的项目 - 这工作正常多年来使用 TFS2013,到目前为止至少有 30 个项目迁移到 2017 构建系统。
然而,在一个非常简单的项目中,我不断收到错误...
Error MSB4126: The specified solution configuration "dev|any cpu" is invalid.
尽管配置和平台作为 "dev" & "any cpu" 从构建中正确传递,并且解决方案和项目文件都设置了正确的配置...
sln:
Microsoft Visual Studio Solution File, Format Version 12.00
Visual Studio 15
VisualStudioVersion = 15.0.27703.2042
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MailMessageSerialisation", "MailMessageSerialisation\MailMessageSerialisation.csproj", "{9D787499-7DBB-4760-8923-C86FD13C4394}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
dev|Any CPU = dev|Any CPU
prod|Any CPU = prod|Any CPU
test|Any CPU = test|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9D787499-7DBB-4760-8923-C86FD13C4394}.dev|Any CPU.ActiveCfg = dev|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.dev|Any CPU.Build.0 = dev|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.prod|Any CPU.ActiveCfg = prod|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.prod|Any CPU.Build.0 = prod|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.test|Any CPU.ActiveCfg = test|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.test|Any CPU.Build.0 = test|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2C7FB0D0-7327-4D21-9A11-0B34AC019E68}
EndGlobalSection
GlobalSection(TeamFoundationVersionControl) = preSolution
SccNumberOfProjects = 2
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = http://XXXXXXXXX:8080/tfs/infrastructure
SccLocalPath0 = .
SccProjectUniqueName1 = MailMessageSerialisation\MailMessageSerialisation.csproj
SccProjectName1 = MailMessageSerialisation
SccLocalPath1 = MailMessageSerialisation
EndGlobalSection
EndGlobal
csproj:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">dev</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{9D787499-7DBB-4760-8923-C86FD13C4394}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MailMessageSerialisation</RootNamespace>
<AssemblyName>MailMessageSerialisation</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'dev|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\dev\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'test|AnyCPU'">
<OutputPath>bin\test\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'prod|AnyCPU'">
<OutputPath>bin\prod\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<!--
snip
-->
</Project>
构建输出的构建求解步骤:
******************************************************************************
Starting: Build solution **\*.sln
******************************************************************************
==============================================================================
Task : Visual Studio Build
Description : Build with MSBuild and set the Visual Studio version property
Version : 1.119.0
Author : Microsoft Corporation
Help : [More Information](https://go.microsoft.com/fwlink/?LinkID=613727)
==============================================================================
"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\vswhere.exe" -version [15.0,16.0) -latest -format json
"C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\msbuild.exe" "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" /nologo /nr:false /dl:CentralLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=8659b024-ac52-47a4-a6ab-1be44fd5e1f8|SolutionDir=e:\ci\builds\s\MailMessageSerialisation\dev"*ForwardingLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:platform="any cpu" /p:configuration="dev" /p:VisualStudioVersion="15.0" /p:_MSDeployUserAgent="TFS_620f346c-98e2-4693-ab12-3a966e56835f_build_66_333"
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 30/07/2018 3:34:36 PM.
Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "dev|any cpu".
Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" (1) is building "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.csproj" (2) on node 1 (default targets).
PrepareForBuild:
Creating directory "bin\dev\".
Creating directory "obj\dev\".
CoreCompile:
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\Roslyn\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:AnyCPU /errorreport:prompt /define:DEBUG;TRACE /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /reference:e:\ci\builds\s\MailMessageSerialisation\dev\packages\S22.SerializableMailMessage.1.0.5742.24665\lib\net46\S22.Mail.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.dll" /debug+ /debug:full /filealign:512 /out:obj\dev\MailMessageSerialisation.dll /ruleset:"C:\Program Files (x86)\Micros...
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\Roslyn
_CopyFilesMarkedCopyLocal:
Copying file from "e:\ci\builds\s\MailMessageSerialisation\dev\packages\S22.SerializableMailMessage.1.0.5742.24665\lib\net46\S22.Mail.dll" to "bin\dev\S22.Mail.dll".
Creating "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\obj\dev\MailMessageSerialisation.csproj.CopyComplete" because "AlwaysCreate" was specified.
CopyFilesToOutputDirectory:
Copying file from "obj\dev\MailMessageSerialisation.dll" to "bin\dev\MailMessageSerialisation.dll".
MailMessageSerialisation -> e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\bin\dev\MailMessageSerialisation.dll
Copying file from "obj\dev\MailMessageSerialisation.pdb" to "bin\dev\MailMessageSerialisation.pdb".
Done Building Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.csproj" (default targets).
Done Building Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.28
"C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\msbuild.exe" "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" /nologo /nr:false /dl:CentralLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=52be2739-dbca-4b96-a2a2-1bbd66410e14|SolutionDir=e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation"*ForwardingLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:platform="any cpu" /p:configuration="dev" /p:VisualStudioVersion="15.0" /p:_MSDeployUserAgent="TFS_620f346c-98e2-4693-ab12-3a966e56835f_build_66_333"
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 30/07/2018 3:34:38 PM.
e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln.metaproj(0,0): Error MSB4126: The specified solution configuration "dev|any cpu" is invalid. Please specify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those properties blank to use the default solution configuration.
Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" on node 1 (default targets).
e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln.metaproj : error MSB4126: The specified solution configuration "dev|any cpu" is invalid. Please specify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those properties blank to use the default solution configuration. [e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln]
Done Building Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" (default targets) -- FAILED.
Build FAILED.
"e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" (default target) (1) ->
(ValidateSolutionConfiguration target) ->
e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln.metaproj : error MSB4126: The specified solution configuration "dev|any cpu" is invalid. Please specify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those properties blank to use the default solution configuration. [e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.15
Process 'msbuild.exe' exited with code '1'.
******************************************************************************
Finishing: Build solution **\*.sln
******************************************************************************
如您所见,项目和解决方案中都有一个 "dev|any cpu" 配置,并且告诉构建使用这些设置...
... /p:platform="any cpu" /p:configuration="dev" ...
我试过重新创建解决方案文件,对参数使用不同的大小写,跳过一个(不起作用),跳过两个(有效但不允许根据目标环境更改配置) ,我尝试在构建定义步骤中直接输入参数,也尝试通过构建变量输入参数,但都无济于事。
大约一周前,我曾在另一个项目中遇到过这种情况,当时只能通过从 TFS 中完全删除项目并完全重建项目和解决方案(仅保留 class 原始文件)并最终重建构建 - 然后问题就消失了!我假设某处发生腐败,但现在又发生了...
我无法在此处 post 完整的构建步骤日志,它太大了,但我已经这样做了数十次,无法理解为什么这个项目与其他项目有任何不同性质非常相似,所有这些都在构建定义中使用相同的 solution/project 结构和相同的步骤和参数,并且所有这些都有效。
我不想每次遇到这个问题时都必须重建整个项目、解决方案和构建定义 - 我还有一大堆其他项目要在 2013 年过渡,其中一些要复杂得多。
想法?建议? (拜托!)
编辑:
为简单起见,我从解决方案中排除了单元测试项目。只是将它重新添加以进行进一步测试,我发现它构建得很好,尽管与原始库项目相比配置相同!嗯...
编辑2:
简单地添加另一个构建定义(从头开始构建,而不是克隆)并不能解决问题,它似乎是集合中项目的一个属性。已向 MS 提出高级支持案例。
编辑3:
我已经确认这不是代码问题。我复制了一个 "broken" 项目的文件结构,在集合中创建了一个新项目并导入了代码,然后再次手工制作构建 - 与损坏的相同 - 并构建了项目!
我相信我也可以排除我添加到 TFS 的 Export/Import 构建定义扩展。我导出了一个损坏的构建定义,仅更改了 JSON 中的名称并将其导入到新项目中 - 它成功了!
问题是 2017 年构建系统的更改与 XAML 构建以及开发人员(应保持匿名)的一点点 laziness/untidiness 相结合。
在正常情况下,在 TFS 中我们有...
<project name>
\dev
\project 0
\project 1
\etc.
创建第一个项目时,VS 会自动在与项目相同的文件夹中创建一个解决方案文件。如果这是 moved/saved 到 dev 文件夹之前第一次签入,所有人都会对这个世界感到高兴。
不幸的是,在将项目保存到 TFS 之前,这种情况不会经常发生,所以我们得到...
<project name>
\dev
\project0
project.sln
project0.csproj
\project1
project1.csproj
\etc.
一旦发现错误,开发人员将.sln文件重新保存到dev文件夹并签入-项目中现在有两个解决方案文件,但第二个很少见,被遗忘了。
<project name>
\dev
project.sln
\project0
project.sln <- Problem!
project0.csproj
\project1
project1.csproj
\etc.
如果项目是从源代码管理打开的,则不会下载第二个 .sln,这就是将代码复制到新位置的原因 - 通过打开解决方案并仅下载有效内容来清理代码.
新的构建系统下载整个开发分支并且构建步骤被告知(默认情况下)构建 **\*.sln - 它会找到两个解决方案文件。顺便说一句,旧的 XAML 构建系统指定了一个正确的 .sln 文件的路径,因此问题并没有显现出来。
如果在移动 .sln 文件之前设置了 dev、test、train 和 prod 的配置管理器设置,则第二个解决方案将包含正确的值并愉快地构建,只是稍微减慢了构建步骤。但是,如果它仍然只包含 Debug 和 Release,则这与参数不匹配并且构建失败。
感谢 Microsoft Premium Support 的 Martin 仔细研究了一些重要的日志并在大海捞针中找到了这根小针。
这个问题似乎很普遍,但我还没有找到一致的解决方案。
我正在使用 VS2017 和 TFS2017 构建一整套 4.6.1 class 库 - 有些是 nugets,有些是插件 - 我无法构建其中一个项目,尽管使用与之前所有项目相同的方法。
我们使用 "Any CPU" 平台和 "dev"、"test"、"train" 或 "prod" 的配置构建我们所有的项目 - 这工作正常多年来使用 TFS2013,到目前为止至少有 30 个项目迁移到 2017 构建系统。
然而,在一个非常简单的项目中,我不断收到错误...
Error MSB4126: The specified solution configuration "dev|any cpu" is invalid.
尽管配置和平台作为 "dev" & "any cpu" 从构建中正确传递,并且解决方案和项目文件都设置了正确的配置...
sln:
Microsoft Visual Studio Solution File, Format Version 12.00
Visual Studio 15
VisualStudioVersion = 15.0.27703.2042
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MailMessageSerialisation", "MailMessageSerialisation\MailMessageSerialisation.csproj", "{9D787499-7DBB-4760-8923-C86FD13C4394}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
dev|Any CPU = dev|Any CPU
prod|Any CPU = prod|Any CPU
test|Any CPU = test|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9D787499-7DBB-4760-8923-C86FD13C4394}.dev|Any CPU.ActiveCfg = dev|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.dev|Any CPU.Build.0 = dev|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.prod|Any CPU.ActiveCfg = prod|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.prod|Any CPU.Build.0 = prod|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.test|Any CPU.ActiveCfg = test|Any CPU
{9D787499-7DBB-4760-8923-C86FD13C4394}.test|Any CPU.Build.0 = test|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2C7FB0D0-7327-4D21-9A11-0B34AC019E68}
EndGlobalSection
GlobalSection(TeamFoundationVersionControl) = preSolution
SccNumberOfProjects = 2
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = http://XXXXXXXXX:8080/tfs/infrastructure
SccLocalPath0 = .
SccProjectUniqueName1 = MailMessageSerialisation\MailMessageSerialisation.csproj
SccProjectName1 = MailMessageSerialisation
SccLocalPath1 = MailMessageSerialisation
EndGlobalSection
EndGlobal
csproj:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">dev</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{9D787499-7DBB-4760-8923-C86FD13C4394}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MailMessageSerialisation</RootNamespace>
<AssemblyName>MailMessageSerialisation</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'dev|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\dev\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'test|AnyCPU'">
<OutputPath>bin\test\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'prod|AnyCPU'">
<OutputPath>bin\prod\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<!--
snip
-->
</Project>
构建输出的构建求解步骤:
******************************************************************************
Starting: Build solution **\*.sln
******************************************************************************
==============================================================================
Task : Visual Studio Build
Description : Build with MSBuild and set the Visual Studio version property
Version : 1.119.0
Author : Microsoft Corporation
Help : [More Information](https://go.microsoft.com/fwlink/?LinkID=613727)
==============================================================================
"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\vswhere.exe" -version [15.0,16.0) -latest -format json
"C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\msbuild.exe" "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" /nologo /nr:false /dl:CentralLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=8659b024-ac52-47a4-a6ab-1be44fd5e1f8|SolutionDir=e:\ci\builds\s\MailMessageSerialisation\dev"*ForwardingLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:platform="any cpu" /p:configuration="dev" /p:VisualStudioVersion="15.0" /p:_MSDeployUserAgent="TFS_620f346c-98e2-4693-ab12-3a966e56835f_build_66_333"
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 30/07/2018 3:34:36 PM.
Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "dev|any cpu".
Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" (1) is building "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.csproj" (2) on node 1 (default targets).
PrepareForBuild:
Creating directory "bin\dev\".
Creating directory "obj\dev\".
CoreCompile:
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\Roslyn\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:AnyCPU /errorreport:prompt /define:DEBUG;TRACE /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /reference:e:\ci\builds\s\MailMessageSerialisation\dev\packages\S22.SerializableMailMessage.1.0.5742.24665\lib\net46\S22.Mail.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.dll" /debug+ /debug:full /filealign:512 /out:obj\dev\MailMessageSerialisation.dll /ruleset:"C:\Program Files (x86)\Micros...
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\Roslyn
_CopyFilesMarkedCopyLocal:
Copying file from "e:\ci\builds\s\MailMessageSerialisation\dev\packages\S22.SerializableMailMessage.1.0.5742.24665\lib\net46\S22.Mail.dll" to "bin\dev\S22.Mail.dll".
Creating "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\obj\dev\MailMessageSerialisation.csproj.CopyComplete" because "AlwaysCreate" was specified.
CopyFilesToOutputDirectory:
Copying file from "obj\dev\MailMessageSerialisation.dll" to "bin\dev\MailMessageSerialisation.dll".
MailMessageSerialisation -> e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\bin\dev\MailMessageSerialisation.dll
Copying file from "obj\dev\MailMessageSerialisation.pdb" to "bin\dev\MailMessageSerialisation.pdb".
Done Building Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.csproj" (default targets).
Done Building Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation.sln" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.28
"C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\msbuild.exe" "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" /nologo /nr:false /dl:CentralLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=52be2739-dbca-4b96-a2a2-1bbd66410e14|SolutionDir=e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation"*ForwardingLogger,"E:\ci\builds\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:platform="any cpu" /p:configuration="dev" /p:VisualStudioVersion="15.0" /p:_MSDeployUserAgent="TFS_620f346c-98e2-4693-ab12-3a966e56835f_build_66_333"
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 30/07/2018 3:34:38 PM.
e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln.metaproj(0,0): Error MSB4126: The specified solution configuration "dev|any cpu" is invalid. Please specify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those properties blank to use the default solution configuration.
Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" on node 1 (default targets).
e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln.metaproj : error MSB4126: The specified solution configuration "dev|any cpu" is invalid. Please specify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those properties blank to use the default solution configuration. [e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln]
Done Building Project "e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" (default targets) -- FAILED.
Build FAILED.
"e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln" (default target) (1) ->
(ValidateSolutionConfiguration target) ->
e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln.metaproj : error MSB4126: The specified solution configuration "dev|any cpu" is invalid. Please specify a valid solution configuration using the Configuration and Platform properties (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those properties blank to use the default solution configuration. [e:\ci\builds\s\MailMessageSerialisation\dev\MailMessageSerialisation\MailMessageSerialisation.sln]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.15
Process 'msbuild.exe' exited with code '1'.
******************************************************************************
Finishing: Build solution **\*.sln
******************************************************************************
如您所见,项目和解决方案中都有一个 "dev|any cpu" 配置,并且告诉构建使用这些设置...
... /p:platform="any cpu" /p:configuration="dev" ...
我试过重新创建解决方案文件,对参数使用不同的大小写,跳过一个(不起作用),跳过两个(有效但不允许根据目标环境更改配置) ,我尝试在构建定义步骤中直接输入参数,也尝试通过构建变量输入参数,但都无济于事。
大约一周前,我曾在另一个项目中遇到过这种情况,当时只能通过从 TFS 中完全删除项目并完全重建项目和解决方案(仅保留 class 原始文件)并最终重建构建 - 然后问题就消失了!我假设某处发生腐败,但现在又发生了...
我无法在此处 post 完整的构建步骤日志,它太大了,但我已经这样做了数十次,无法理解为什么这个项目与其他项目有任何不同性质非常相似,所有这些都在构建定义中使用相同的 solution/project 结构和相同的步骤和参数,并且所有这些都有效。
我不想每次遇到这个问题时都必须重建整个项目、解决方案和构建定义 - 我还有一大堆其他项目要在 2013 年过渡,其中一些要复杂得多。
想法?建议? (拜托!)
编辑: 为简单起见,我从解决方案中排除了单元测试项目。只是将它重新添加以进行进一步测试,我发现它构建得很好,尽管与原始库项目相比配置相同!嗯...
编辑2: 简单地添加另一个构建定义(从头开始构建,而不是克隆)并不能解决问题,它似乎是集合中项目的一个属性。已向 MS 提出高级支持案例。
编辑3: 我已经确认这不是代码问题。我复制了一个 "broken" 项目的文件结构,在集合中创建了一个新项目并导入了代码,然后再次手工制作构建 - 与损坏的相同 - 并构建了项目!
我相信我也可以排除我添加到 TFS 的 Export/Import 构建定义扩展。我导出了一个损坏的构建定义,仅更改了 JSON 中的名称并将其导入到新项目中 - 它成功了!
问题是 2017 年构建系统的更改与 XAML 构建以及开发人员(应保持匿名)的一点点 laziness/untidiness 相结合。
在正常情况下,在 TFS 中我们有...
<project name>
\dev
\project 0
\project 1
\etc.
创建第一个项目时,VS 会自动在与项目相同的文件夹中创建一个解决方案文件。如果这是 moved/saved 到 dev 文件夹之前第一次签入,所有人都会对这个世界感到高兴。
不幸的是,在将项目保存到 TFS 之前,这种情况不会经常发生,所以我们得到...
<project name>
\dev
\project0
project.sln
project0.csproj
\project1
project1.csproj
\etc.
一旦发现错误,开发人员将.sln文件重新保存到dev文件夹并签入-项目中现在有两个解决方案文件,但第二个很少见,被遗忘了。
<project name>
\dev
project.sln
\project0
project.sln <- Problem!
project0.csproj
\project1
project1.csproj
\etc.
如果项目是从源代码管理打开的,则不会下载第二个 .sln,这就是将代码复制到新位置的原因 - 通过打开解决方案并仅下载有效内容来清理代码.
新的构建系统下载整个开发分支并且构建步骤被告知(默认情况下)构建 **\*.sln - 它会找到两个解决方案文件。顺便说一句,旧的 XAML 构建系统指定了一个正确的 .sln 文件的路径,因此问题并没有显现出来。
如果在移动 .sln 文件之前设置了 dev、test、train 和 prod 的配置管理器设置,则第二个解决方案将包含正确的值并愉快地构建,只是稍微减慢了构建步骤。但是,如果它仍然只包含 Debug 和 Release,则这与参数不匹配并且构建失败。
感谢 Microsoft Premium Support 的 Martin 仔细研究了一些重要的日志并在大海捞针中找到了这根小针。