我有一个msbuild参数
/t:Project.HQ.Web /p:DeployOnBuild=true /p:WebPublishMethod=Package
/p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true
/p:PackageLocation="$(build.artifactstagingdirectory)\\"
在我的Azure DevOps构建管道中用于解决方案构建。
我看到一条错误消息
代理作业1:“代码\ AnotherMutliProjSolution.sln(0,0):错误MSB4014: 由于内部故障,构建意外停止。 System.ArgumentException:名称“ Project.HQ.Web”包含一个 无效字符 ”。”。在 Microsoft.Build.Shared.ErrorUtilities.ThrowArgument(Exception innerException,字符串resourceName,Object [] args)位于 Microsoft.Build.Construction.ProjectTargetElement.set_Name(String 价值) Microsoft.Build.Construction.ProjectTargetElement.CreateDisconnected(String 名称,ProjectRootElement containsProject)位于 Microsoft.Build.Execution.ProjectTargetInstance.ToProjectTargetElement(ProjectRootElement rootElement) Microsoft.Build.Execution.ProjectInstance.ToProjectRootElement()在 Microsoft.Build.Construction.SolutionProjectGenerator.CreateSolutionProject(String wrapperProjectToolsVersion,布尔值explicitToolsVersionSpecified),位于 Microsoft.Build.Construction.SolutionProjectGenerator.Generate()在 Microsoft.Build.Execution.ProjectInstance.GenerateSolutionWrapper(String projectFile,IDictionary
2 globalProperties, String toolsVersion, ILoggingService loggingService, BuildEventContext projectBuildEventContext, IReadOnlyCollection
1个targetNames, ISdkResolverService sdkResolverService,位于Int32提交ID) Microsoft.Build.Execution.ProjectInstance.LoadSolutionForBuild(字符串 projectFile,PropertyDictionary1 globalPropertiesInstances, String toolsVersion, BuildParameters buildParameters, ILoggingService loggingService, BuildEventContext projectBuildEventContext, Boolean isExplicitlyLoaded, IReadOnlyCollection
1个targetNames, ISdkResolverService sdkResolverService,位于Int32提交ID) Microsoft.Build.Execution.BuildManager.LoadSolutionIntoConfiguration(BuildRequestConfiguration 配置,BuildRequest请求) Microsoft.Build.Execution.BuildManager.HandleNewRequest(Int32节点, BuildRequestBlocker阻止程序) Microsoft.Build.Execution.BuildManager.IssueRequestToScheduler(BuildSubmission 提交,布尔allowMainThreadBuild,BuildRequestBlocker 拦截器)”评论
我尝试将目标设置为“ Project.HQ.Web”和“ Project.HQ.Web”。我仍然遇到相同的问题。
答案 0 :(得分:2)
From the documentation,/t
用于构建项目目标。项目本身没有任何开关。
您必须用作命令行:
msbuild.exe /p:DeployOnBuild=true /p:WebPublishMethod=Package
/p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true
/p:PackageLocation="$(build.artifactstagingdirectory)\\" "Project.HQ.Web"
答案 1 :(得分:1)
您需要用下划线替换.
才能生成生成的解决方案目标:
msbuild /t:Project_HQ_Web
请参阅How to: Build specific targets in solutions by using MSBuild.exe的以下部分
在-target:开关之后指定目标,格式为
<ProjectName>:<TargetName>
。如果项目名称包含任何 %,$,@,;,。,(,)或'字符,请在 指定的目标名称。
答案 2 :(得分:0)
我终于明白了。 我所做的不是建立解决方案, 我通过传递msbuild参数构建了csproj文件本身
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(build.stagingDirectory)\\ProjectHQWeb