【问题标题】:After upgrading solution to .NET framework 4.5 the daily deploy stopped working将解决方案升级到 .NET 框架 4.5 后,日常部署停止工作
【发布时间】:2012-10-18 13:34:13
【问题描述】:

我们已经成功地每天使用 TFS2010 中的 msdeploy 更新我们的开发网站。

在我们升级到 VS2012,我们的应用程序从 .NET Framework 4.0 升级到 4.5 和 ASP.NET MVC 从 3.0 升级到 4.0 之前,这一切正常。看起来一切正常,并且已部署程序集,但实际上并未部署任何程序。

我已经研究了两天了,无法弄清楚为什么会发生这种情况,现在我的想法已经不多了。

以下是我的构建脚本的一部分,它在升级之前一直在工作。

<MSBuild
                Projects="$(SolutionRoot)\My.Web\My.Web.csproj"
                Properties="MvcBuildViews=False;AllowUntrustedCertificate=True;AuthType=Basic;Configuration=Dev;CreatePackageOnPublish=True;DeployIisAppPath=dev.myweb;DeployOnBuild=True;DeployTarget=MsDeployPublish;MSDeployPublishMethod=WMSvc;MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd;UserName=UserName;Password=Password;UseMsdeployExe=True"
                ContinueOnError="False"
                />

当启动升级并发现我的问题时,我们使用的是 Web Deploy 2.0,但现在我们已升级到 Web Deploy 3.0。我还确保我们正在使用ToolsVersion="4.0" 构建。

更新 --

msbuild.exe /p:AllowUntrustedCertificate=True /p:AuthType=基本 /p:配置=开发 /p:CreatePackageOnPublish=真 /p:DeployIisAppPath=dev.myweb /p:DeployOnBuild=真 /p:DeployTarget=MsDeployPublish /p:MSDeployPublishMethod=WMSvc /p:MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd /p:用户名=用户名 /p:密码=密码 /p:UseMsdeployExe=True E:\Builds\1\WhatEver\Daily_Build\Sources\My.Web\My.Web.csproj

现在我还尝试从我们的 TFS 运行上述 msbuild 命令,但没有任何响应,这让我完全感到沮丧。 TFS 的事件日志中没有任何内容,无论详细程度如何,日志文件中都没有任何内容......有什么想法吗?

它确实可以使用下面的 msdeploy 直接工作;

<Exec Command="&quot;C:\Program Files\IIS\Microsoft Web Deploy V3\MSDeploy.exe&quot; -verb:sync -source:contentPath=&quot;E:\Builds\1\WhatEver\Daily_Build\Sources\My.Web\My.Web.csproj&quot; -dest:contentPath=&quot;E:\dev.my.web&quot;,computername=https://10.xxx.xxx.xxx:8172/MsDeploy.axd,username=UserName,password=Password,authtype=Basic -allowUntrusted=True"
              ContinueOnError="false" />

--

更新 2 -- 由于输出类型是类库,微软似乎添加了检查哪些类型的项目是可发布项目而我们的 Web 应用程序不是。这对 v4.0 有效,但显然不适用于 v4.5。

有人知道如何让它再次工作吗?我需要更改项目类型吗?预先创建发布包然后部署它?还是什么?

--

其他人有同样的问题吗?你找到解决方案了吗?

会不会是 MSBuild 的版本有问题?

【问题讨论】:

  • 您的构建日志中是否有任何类型的错误消息,或者部署只是默默地没有发生?
  • 不幸的是没有,它只是默默地没有发生。实际上,获得某种反馈确实会有所帮助。即使使用详细诊断,构建文件中也没有任何内容。
  • 对 msdeploy.exe 的调用是否出现在 msbuild 输出中?
  • 不,它没有。有关我自己的研究,请参阅上面的更新。
  • 如果您仍然需要帮助,请告诉我,以便我直接与您合作。

标签: msbuild .net-4.5 msdeploy webdeploy


【解决方案1】:

这是我的建议。在 VS2012 中,使用发布对话框创建的发布配置文件,我们可以轻松地自动发布您的 Web 项目。在您的情况下,创建一个新的 MSDeploy 配置文件。当您创建该配置文件时,我们会将设置保存到 Properties\PublishProfiles(或 VB 的 My Project\PublishProfiles)下的文件中。此文件的扩展名为 .pubxml。这些文件实际上是 MSBuild 文件,您可以根据需要对其进行自定义。您也可以继续使用发布对话框。密码将存储在 .user 文件中并加密,只有您可以解密。

创建该配置文件后,如果您正在构建 .sln 文件,则可以使用以下命令发布。

msbuild mysoln.sln /p:DeployOnBuild=true /p:PublishProfile=<ProfileName> /p:Password=<Password>

如果您正在构建 .csproj/.vbproj,那么您需要通过以下方式对其进行一些调整

msbuild mysoln.sln /p:DeployOnBuild=true /p:PublishProfile=<ProfileName> /p:Password=<Password> /p:VisualStudioVersion=11.0

更多关于为什么需要 VisualStudioVersion 的信息,请访问http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx。

完成此操作后,您将能够像以前一样构建+发布。仅供参考,我们已经在 Azure SDK https://www.windowsazure.com/en-us/develop/net/# 中为 VS2010 提供了所有这些新的 Web 发布功能。

在您的问题中,我注意到您正在指定一些自定义属性,例如 MvcBuildViews。如果需要,您现在可以将这些属性直接放在发布配置文件(.pubxml 文件)中。当然,如果这对您的场景更有意义,您仍然可以在命令行中传递它们。

更多信息请访问http://sedodream.com/2012/06/15/VisualStudio2010WebPublishUpdates.aspx。

如果您看看我们为开发人员提供的自动发布方法,那就是指定要在构建期间执行的属性和目标。这种方法的问题在于,这限制了我们增强网络发布体验的能力。在新版本中,我们引入了一个抽象,发布配置文件,它允许我们更改 Web 发布管道的底层目标,您的自动化脚本将继续运行。希望从现在开始,您将不必重新访问此问题。

【讨论】:

  • 谢谢。我已经阅读了很多关于 sedodream 的博客文章 :-)。如果我有机会部署到当前客户端的任何服务器,我想我会更早地走 msdeploy 配置文件的路径。不幸的是,我被阻止在我的 PC 上执行此操作,我所有的努力都需要通过我们的 TFS 进行反复试验,而使用 msbuild 和 msdeploy 会很痛苦。
【解决方案2】:

我今天也遇到了同样的问题。我也试图使用没有安装 Visual Studio 2012 的机器自动部署 .NET 4.5 Web 应用程序。但是,我的情况有一些细微差别:我使用的是 TeamCity 而不是 TFS,我们的解决方案是使用 .NET 4.5 创建的,而不是从 .NET 4.0 升级而来的。

不过,我确实遇到了同样的问题。我将使用 MSBuild 构建 Web 应用程序并将其部署到 IIS,方式大致相同。这种方法在我的开发机器上运行良好。然而,当我在 CI 服务器上运行 MSBuild 时,它非常愉快地构建了 Web 应用程序,但之后就停止了:没有错误、没有警告、什么也没有,只是一条构建成功的消息。没有任何尝试将应用程序部署到 IIS 的迹象。

似乎 MSBuild 缺少执行 Web 部署的相关目标。 解决方法是将文件夹 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web 从我的开发机器复制到 CI 服务器,将其复制到 CI 服务器上与我机器上相同的位置。

一旦我这样做了,MSBuild 就会抱怨需要 Web Deploy 3.0,但这很容易解决。在 CI 服务器上也安装了它之后,MSBuild 非常高兴地部署了 Web 应用程序。

【讨论】:

  • 这不会导致许可问题吗?
  • @leppie:我不确定,但我很想说不是。您当然不需要完整的 VS2012 许可证来获取这些 MSBuild 目标,因为它们是作为 VS2012 Express for Web 的一部分安装的。此外,Web 文件夹不是我必须复制到服务器的唯一文件夹:MSBuild 甚至可以在没有 VisualStudio\v11.0 文件夹中的 WebApplications 文件夹的情况下在 CI 服务器上编译 Web 应用程序。
【解决方案3】:

扩展Luke Woodward's answer:

我也发现将 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\ 从我的本地计算机部署到构建服务器是解决方法。

然而,真正的解决方法是将 Microsoft Web Developer Tools 作为 VS 2012 安装的一部分进行安装,这将创建此文件夹等。这解决了 Ieppie 的许可异议。

我对此进行了测试...

  1. 正在删除C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\
  2. 运行 VS 2012 安装程序并添加 MS Web 开发工具。
  3. 验证安装后C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\ 已恢复。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2022-08-08
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多