我在 2019 年 10 月发布此消息。在此线程上的原始帖子发布近 6 年后,错误仍然存在,但这次是在 VS 2019 上。环顾网络后,即使重新安装 Deploy 3.5/3.6 和同样在更新 VS 之后,我终于设法通过查看 MSBuild 设置来修复它。想在这里分享它,因为这是 Google 上的热门搜索结果。
脚步:
在 VS 2019 上创建了一个简单的命令提示符应用程序。在解决方案资源管理器中右键单击该项目,单击“发布为 Azure Webjob ...”,然后在随后的对话框中进行我的 Azure 设置。
预期结果:
这个简单的控制台应用程序将作为 WebJob 发布到 Azure,就像在 VS 2017 上一样。
实际结果:
发布操作失败并显示以下消息:
Error : Web deployment task failed. ('Microsoft.Web.Deployment.DeploymentBaseOptions' does not contain a definition for 'UserAgent') Publish failed to deploy.
调查:
Visual Studio输出窗格中的错误行指向“C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0 下的文件Microsoft.Web.Publishing.targets \网络”。双击此错误行会在显示部分的位置打开文件<VSMSDeploy>
。在本节中,该UserAgent
属性设置为"$(_MSDeployUserAgent)"
。 _MSDeployUserAgent
又被设置在<PropertyGroup>
as 下<_MSDeployUserAgent>VS$(_MSDeployUserAgentSource)</_MSDeployUserAgent>
。整个 PropertyGroup 部分粘贴在下面以供参考:
<!-- UserAgent string sent to msdeploy -->
<PropertyGroup>
<_MSDeployUserAgentSource Condition=" '$(BuildingInsideVisualStudio)' != 'true'">$(VisualStudioVersion):CmdLine</_MSDeployUserAgentSource>
<_MSDeployUserAgentSource Condition=" '$(BuildingInsideVisualStudio)' == 'true'">$(VisualStudioVersion):PublishDialog</_MSDeployUserAgentSource>
<_MSDeployUserAgent>VS$(_MSDeployUserAgentSource)</_MSDeployUserAgent>
</PropertyGroup>
修复:
更改元素以UserAgent= "$(_MSDeployUserAgent)"
解决问题,并且 WebJob 已成功发布到我的应用服务。<VSMSDeploy>
UserAgent="VS$(_MSDeployUserAgentSource)"
(警告:修改此文件时请格外小心,因为不正确的更改将对来自 VS 和命令提示符的所有构建命令产生不利影响。)
结论性意见:
在对Microsoft.Web.Publishing.targets进行此更改后,VS 似乎已经进行了类似于 CommandLine 构建的 UserAgent 设置,而没有将其与 PublicDialog 构建区分开来。所有与发布相关的输出行都显示在输出窗格中,就像它们在 VS 2017 中一样,一切都很顺利。