如何使用TFS创建Web部署包?

6
我只需要使用TFS构建创建Web部署包,不想在IIS中自动部署它。
我已经在“生成定义”->“MSBuild参数”中添加了以下两个参数:
/p:CreatePackageOnPublish=true /p:DeployOnBuild=true 问题是我没有在放置位置中得到ZIP文件,并且出现了以下错误。
C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (1657): “MapUriToIisWebServer”任务意外失败。System.Runtime.InteropServices.COMException (0x80005000):未知错误 (0x80005000) 在System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind() 在System.DirectoryServices.DirectoryEntry.get_IsContainer() 在System.DirectoryServices.DirectoryEntries.CheckIsContainer() 在System.DirectoryServices.DirectoryEntries.Find(String name, String schemaClassName) 在Microsoft.Web.Publishing.Tasks.MapUriToIisWebServer.get_IisMajorVersion() 在Microsoft.Web.Publishing.Tasks.MapUriToIisWebServer.Execute() 在Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)
问题可能是什么?
现在我收到了不同的错误
错误:Web部署任务失败。(类型为'manifest'和路径为'e:\ TFS \ Dev \ ApplicationName \ Binaries \ Release_PublishedWebsites \ ApplicationName_Package \ ApplicationName.SourceManifest.xml'的对象无法创建。)
错误:类型为“清单”且路径为“e:\ TFS \ Dev \ ApplicationName \ Binaries \ Release_PublishedWebsites \ ApplicationName_Package \ ApplicationName.SourceManifest.xml”的对象无法创建。
错误:清单“sitemanifest”中的一个或多个条目无效。
错误:站点'Default Web Site'中不存在应用程序'/ApplicationName'。

这些属性会导致网络发布管道使用您的项目设置,除非您覆盖它们。您可以告诉我们您的项目属性中如何配置与发布相关的设置吗? - Jim Lamb
已勾选“创建部署包作为ZIP文件”。 - Gansun
2
Tomas Scot在他的博客文章中描述了同样的问题,链接如下: http://tomasscott.wordpress.com/tag/mapuritoiiswebserver/ - Jim Lamb
我不知道问题出在哪里,但只要加上“/p:DeployOnBuild=true”,我就一直都成功了。 - John Saunders
3个回答

5

我相信你只需要将“Package”目标添加到你的web项目构建中即可。

 /t:Build;Package

我已经成功地使用TFS构建中的该目标生成了带有包装压缩文件的_PublishedWebsite文件夹一段时间了。
编辑:Package目标的说明 如果您将Web应用程序的csproj文件视为XML文件进行查看,您会发现它包含以下内容。
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

这包括将一堆Web目标添加到您的构建过程中。打开此文件,底部您会看到它反过来包含了其他内容。
 <Import Project="..\Web\Microsoft.Web.Publishing.targets" Condition="Exists('..\Web\Microsoft.Web.Publishing.targets')" />

这个文件包含了MSBuild的Web部署过程的定义。你会看到它声明了一个变量来表示在部署时要调用的“目标”是“Package”。

 <DeployDefaultTarget Condition="'$(DeployDefaultTarget)'==''">Package</DeployDefaultTarget>

如果您继续阅读本文件,将会了解包装和部署在幕后是如何工作的,以及可以操纵哪些一组属性和目标来定制您的构建。然而,简言之,如果您调用
 msbuild yourwebapplication.csproj /t:Package /p:Configuration=Release 

它应该为您的应用程序的发布配置构建Web部署包。

1
你能详细解释一下吗? - Gansun
所以仅使用“/p:CreatePackageOnPublish=true”是不够的,我们需要调用包目标本身吗? - The Muffin Man

0

可能是MSBuild DeployOnBuild=true not publishing的重复问题。

我在Atlassian Bamboo上也遇到了同样的问题,这个方法解决了我的问题:从一台安装有Visual Studio的机器上复制“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web”文件夹中的内容到TFS Build服务器上。


0

我之前也遇到了同样的问题,唯一解决方法如下:

  1. 打开您的 IIS 管理控制台
  2. 进入默认网站
  3. 添加一个名为 "ApplicationName" 的新应用程序
  4. 再次运行 msbuild。这次应该可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接