TeamCity MSBuild网站publishproj

gen*_*ion 4 msbuild teamcity web-applications webdeploy web

我有一个Web站点项目,我试图通过TeamCity和WebDeploy进行部署.

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

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

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

Failed to start MSBuild.exe. Failed to detect default target(s) in the project file C:\TeamCity\buildAgent\work\d9dda73c7948f14a\MainSite\website.publishproj. Please define targets explicitly in the build configuration options on TeamCity Web UI. Project does not define DefaultTargets or InitialTargets.

我查看了.publishproj文件,并且没有定义Target.

我也跟踪过Troy Hunt 你正在为Web应用程序部署错误的文章,这很好用.

任何人都可以建议我如何从Team City部署网站(非Web应用程序)?

Ily*_*kov 6

我从未使用过web-site-not-a-web-project,所以请耐心等待.

website.publishproj似乎是创建你触摸的那一刻Build> Publish Web SiteVisual Studio中的菜单和导入Microsoft.WebSite.Publishing.targets,这是好的,因为它是由你的普通web项目()导入的相同的类似目标文件,Microsoft.WebApplication.targets并且两者都导入Microsoft.Web.Publishing.targets.

与Visual Studio创建的任何项目不同,它没有DefaultTargets = Buildnor OutputPath属性,因此您需要TargetsMSBuild构建步骤中明确指定在Microsoft.WebSite.Publishing.targets或中定义的任何目标Microsoft.Web.Publishing.targets.

您可以调用您的标准msbuild website.publishproj /t:Package /p:OutputPath=.\来生成.cmd和对应.zipobj\Debug\Package.然后只需调用.cmd或传递.zipmsdeploy.exe -source:package=.zip或尝试做/t:Build /p:DeployOnBuild=true但我怀疑你会错过正常的web项目预定义的垃圾.

编辑:

似乎有一个循环引用的地方和你最终包含自身2/3份包装PackageTmp\_PublishedWebsites,所以玩的OutDir,OutputPath,PackageDestinationRoot等摆脱重复的.创建一个示例Web项目并阅读.csproj.targets获取想法.

编辑:

如果你通过发布向导,你也会得到App_Data\PublishProfiles\Foo.pubxml通过PublishProfileName/ 阅读WebPublishProfileFile,导入它可以节省一些打字时间.可能是相关的.

编辑:

导入适当的网络目标似乎是2012/2013年的新功能,2010年您需要使用aspnet_compiler.

aspnet_compiler -v Foo -p . -f obj
msdeploy -verb:sync -source:iisApp=%CD%\obj -dest:iisApp="Default Web Site/foo"
Run Code Online (Sandbox Code Playgroud)