4

我试图让我的 Web 应用程序在自动构建结束时自动部署,但我显然遗漏了一些东西。

我的设置是:
VS2012 在 Win7 工作站
TFS2010 存储库上 serverA
TFS 构建代理在 serverB
测试站点在 serverC 上的 IIS7。

我使用默认的 MVC4 模板创建了一个快速测试项目,并使用 MS VS Scrum 1.0 模板创建了一个团队项目来配合它。

我使用发布 Web 对话框为 Web 应用程序创建了一个新的发布配置文件,并且 .pubxml 文件与项目一起签入。.pubxml 文件如下所示:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish>TestServer/DeployTest</SiteUrlToLaunchAfterPublish>
    <MSDeployServiceURL>http://TestServer</MSDeployServiceURL>
    <DeployIisAppPath>webapp-dev/DeployTest</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod>
    <UserName>mydomain\myuser</UserName>
    <_SavePWD>True</_SavePWD>
    <PublishDatabaseSettings>
      <Objects xmlns="" />
    </PublishDatabaseSettings>
  </PropertyGroup>
</Project>

*为了保护无辜者,部分名称已更改 :)

使用此配置文件,我可以成功地将应用程序从 Visual Studio 发布到测试 Web 服务器,而不会出现任何问题。在Scott Hanselman 的博客文章之后,我成功地从我的工作站上的命令行发布:

msbuild DeployTest.csproj /p:DeployOnBuild=true /p:PublishProfile=Test /p:AllowUntrustedCertificate=true /p:Password=notTheRealPassword

然后我在 Team Explorer 中创建了一个构建,它将使用我的构建服务器来编译然后运行单元测试。都好。项目构建,单元测试通过。

然后,我将命令行中的参数添加到构建定义的 Advanced 部分的 MS Build Arguments 中:

/p:DeployOnBuild=true /p:PublishProfile=Test /p:AllowUntrustedCertificate=true /p:Password=notTheRealPassword

构建运行,单元测试通过,没有任何内容发布到 Web 服务器。:(

有人可以告诉我我错过了什么吗?我读过的任何内容似乎都表明我错过了一个步骤,但似乎很少有宝贵的文档来解释这是如何完成的。

4

2 回答 2

1

听起来 tfs 可能不支持发布配置文件。

您可能需要从配置文件中提取所有参数并手动指定它们。

这是一个类似的问题。

Team Build:使用 MSDeploy 在本地发布

于 2012-10-05T20:59:55.220 回答
0

我知道这是一个老问题,但今天我遇到了同样的问题,我想我知道你观察到的行为的原因。让我总结一下这个问题:

  1. 您已经创建了一个 Web 部署发布配置文件。
  2. 当您通过 MSBuild 命令从命令提示符使用配置文件时,该站点已成功发布。
  3. 但是,当您从构建定义中使用此配置文件时(通过在构建定义的高级部分中指定 MS 构建参数),该站点不会发布。

我认为这背后的原因是因为您的工作站上有 VS 2012,它支持使用配置文件功能发布。因此,当您在工作站上从命令提示符运行 MS 构建时,该站点就会发布。但是在 TFS 2010 上不支持发布配置文件,因此使用构建服务器不会发布站点。

我今天遇到了同样的问题,我做了以下来解决这个问题:

  1. 在 TFS 机器上,从命令提示符下,我使用发布配置文件运行了 MS Build 命令。该命令成功运行,但站点上没有发布(复制)任何内容。这证明 TFS 2010 服务器不支持公共配置文件。
  2. 我在 TFS 机器上部署了 VS 2010。我为 Visual Studio 2010 安装了 web deploy 3.5 和 Windows Azure SDK。这是为 VS 2010 上的发布配置文件提供支持的方式。
  3. 然后我使用命令提示符下的已发布配置文件运行 MS Build 命令,并成功发布了站点。
  4. 然后最后使用 MS Build 参数执行构建定义,站点成功发布。

我知道在 TFS 机器上安装 Visual Studio 不是一个理想的解决方案,但至少它解决了我的问题。我也不确定为什么安装带有发布配置文件支持的 VS 2010 解决了这个问题。但似乎在安装后,一些缺少的组件/dll 被部署在 TFS 机器上,从而解决了这个问题。希望这可以解决您的部署问题。

[更新]:上述行为可能还有另一个原因。检查构建活动的日志消息。如果您发现类似以下的警告:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (484, 9):警告:未为项目 ProjectName.csproj 设置 OutputPath 属性。请检查以确保您为此项目指定了有效的配置和平台组合。配置='发布'平台='任何 CPU'

那么它可能与构建配置有关。如果您使用“Any CPU”作为构建配置,请将其更改为“AnyCPU”(删除空间)。详细解释请参考以下链接:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/0bb277ec-a08c-4795-88f0-3207654e2560/the-outputpath-property-is-not-set-for-project-xxxxxbtproj-please- check-to-make-sure-that-you?forum=tfsbuild

艾美

于 2013-12-04T15:19:59.283 回答