Web applications TeamCity MSBuild网站publishproj

Web applications TeamCity MSBuild网站publishproj,web-applications,msbuild,web,teamcity,webdeploy,Web Applications,Msbuild,Web,Teamcity,Webdeploy,我有一个网站项目,我正试图通过TeamCity和WebDeploy进行部署 因为这是一个网站而不是一个Web应用程序,所以我没有.vbproj或.csproj文件 我从这里的帖子中得出结论,我需要创建一个.publishproj文件,因为MSbuild使用它作为构建文件 但是,当TeamCity调用MSBuild时,它将退出,并出现以下错误:- 无法启动MSBuild.exe。在项目文件C:\TeamCity\buildAgent\work\d9dda73c7948f14a\MainSite\w

我有一个网站项目,我正试图通过TeamCity和WebDeploy进行部署

因为这是一个网站而不是一个Web应用程序,所以我没有.vbproj或.csproj文件

我从这里的帖子中得出结论,我需要创建一个.publishproj文件,因为MSbuild使用它作为构建文件

但是,当TeamCity调用MSBuild时,它将退出,并出现以下错误:-

无法启动MSBuild.exe。在项目文件C:\TeamCity\buildAgent\work\d9dda73c7948f14a\MainSite\website.publishproj中检测默认目标失败。请在TeamCity Web UI的构建配置选项中明确定义目标。Project未定义DefaultTargets或InitialTargets。

我查看了.publishproj文件的内部,没有定义任何目标

我还阅读了Troy Hunt的文章,了解了一个Web应用程序,效果很好


有谁能建议我如何从TeamCity部署Web站点(而不是Web应用程序)?

我从来没有使用过Web-Site-NOT-a-Web-project,所以对此持保留态度

website.publishproj
似乎是在您触摸Visual Studio中的
Build
publishweb Site
菜单并导入
Microsoft.website.Publishing.targets
时创建的,这是很好的,因为它是由正常Web项目导入的相同类似目标文件(
Microsoft.WebApplication.targets
)并且这两种方法都导入Microsoft.Web.Publishing.targets

与Visual Studio创建的任何项目不同,它没有
DefaultTargets=Build
OutputPath
属性,因此您需要在
Microsoft.WebSite.Publishing.Targets
Microsoft.Web.Publishing.Targets
中明确指定
目标

您可以调用标准的
msbuild网站.publishproj/t:Package/p:OutputPath=.\
obj\Debug\Package
中生成
.cmd
和相应的
.zip
。然后只需调用
.cmd
或将
.zip
传递到
msdeploy.exe-source:package=.zip
或尝试执行
/t:Build/p:DeployOnBuild=true
,但我怀疑您可能会丢失常规web项目预定义的大量属性

编辑:

某个地方似乎有一个循环引用,您最终在
PackageTmp\\u PublishedWebsites
中得到了一个包含自身2/3个副本的包,因此可以使用
OutDir
OutputPath
PackageDestinationRoot
等来消除重复项。创建一个示例web项目,并通读
.csproj
.targets
以获得想法

编辑:

如果您使用发布向导,还将获得通过
PublishProfileName
/
WebPublishProfileFile
读取的
App\u Data\PublishProfiles\Foo.pubxml
,导入它将节省一些键入时间。可能是相关的

编辑:

导入适当的web目标似乎是2012/2013年的一项新功能,到2010年,您需要使用
aspnet\u编译器

aspnet_compiler -v Foo -p . -f obj
msdeploy -verb:sync -source:iisApp=%CD%\obj -dest:iisApp="Default Web Site/foo"

最后我发现,出于某种原因,我必须在Team City中为网站项目显式地将目标设置为
Rebuild

Visual Studio(sln)的构建步骤属性Targets设置为

假设您具有以下目录结构:

\{Team City Working Directory}
  |
  |-- MyWebSite
  |    |-- App_Code
  |    |-- App_Data
  |    |    |
  |    |    \--PublishProfiles
  |    |         |
  |    |         \-- MyWebSite-Package.pubxml
  |    |
  |    | ... Other files and directories
  |    |
  |    |-- MyWebSite.publishproj
  |
  |-- SomeOtherLibraryProject
  |
  \-- MyWebSite.sln
然后,如果要在生成步骤的解决方案文件路径字段中指定解决方案文件,则应为生成步骤指定以下命令行参数

/p:PublishProfile=MyWebSite\App_Data\PublishProfiles\MyWebSite-Package.pubxml
但是,您也可以为生成步骤的解决方案文件路径属性指定
\MyWebSite\MyWebSite.publishproj
;如果这样做,则应指定以下命令行参数:

/p:PublishProfile=App_Data\PublishProfiles\MyWebSite-Package.pubxml
PublishProfile
属性是在解决方案文件路径属性中指定的项目或解决方案文件的相对路径