我正在尝试配置TeamCity 5.0来运行我的一个项目的"Publish"目标。
当我在VS 2008中加载解决方案并单击项目上的发布时,网站会很好地构建 - 文件自动出现在服务器上等。但是当我通过TeamCity Sln2008运行sln文件时,TeamCity返回:
[项目"Portal.csproj"(发布目标):]跳过不可发布的项目。
有人遇到过同样的问题吗?
Filip
我正在尝试配置TeamCity 5.0来运行我的一个项目的"Publish"目标。
当我在VS 2008中加载解决方案并单击项目上的发布时,网站会很好地构建 - 文件自动出现在服务器上等。但是当我通过TeamCity Sln2008运行sln文件时,TeamCity返回:
[项目"Portal.csproj"(发布目标):]跳过不可发布的项目。
有人遇到过同样的问题吗?
Filip
<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<PropertyGroup>
<PackageFolder>C:\Builds\AppServer\Actual</PackageFolder>
</PropertyGroup>
<Target Name="Build" DependsOnTargets="BeforeBuild">
<MSBuild Projects="TeamWork-AppServer.sln"
Targets="Rebuild"
Properties="Configuration=Debug;OutDir=$(PackageFolder)\;"></MSBuild>
</Target>
</Project>
或者您可以使用 VS 2008 Web Deployment Project
。这里有一个很好的教程。
如果它是一个Web项目,您可以使用Microsoft.WebApplication.targets。除非您在构建代理上安装了Windows SDK,否则您需要将目标文件复制到您的源代码控制中,并通过添加以下内容从您的Web项目引用:
<Import Project="{path to your tools}\Microsoft.WebApplication.targets" />
您可以在此处找到目标文件(根据您的操作系统):
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications
<MSBuild Projects="{path to your web project file}"
Targets="Build;ResolveReferences;_CopyWebApplication"
Properties="Configuration=Release;Architecture=Any;WebProjectOutputDir={your web root};OutDir={your web root}\bin\" />
这是我如何修改ASP.NET MVC项目的.csproj文件以通过TeamCity 5.1.2进行部署。 在.csproj文件中,用以下XML替换AfterBuild目标(如果您现有的AfterBuild中已经有命令,则必须将它们合并到这些目标中):
<PropertyGroup>
<DeployTarget>0</DeployTarget>
<PublishTarget>0</PublishTarget>
<PublishFolder>..\Deployment\YourWebsiteName</PublishFolder>
</PropertyGroup>
<Target Name="PublishProperties">
<CreateProperty Value="$(PublishFolder)">
<Output TaskParameter="Value" PropertyName="WebProjectOutputDir"/>
</CreateProperty>
<CreateProperty Value="$(PublishFolder)\bin\">
<Output TaskParameter="Value" PropertyName="OutDir"/>
</CreateProperty>
</Target>
<Target Name="WebPublish" DependsOnTargets="BeforeBuild;PublishProperties">
<RemoveDir Directories="$(PublishFolder)"
ContinueOnError="true" />
<CallTarget Targets="ResolveReferences;_CopyWebApplication" />
</Target>
<Target Name="Deploy" DependsOnTargets="WebPublish">
<CreateProperty Value="Path\To\Your\Server" Condition="$(DeployFolder) == ''">
<Output TaskParameter="Value" PropertyName="DeployFolder"/>
</CreateProperty>
<RemoveDir Directories="$(DeployFolder)" Condition="$(CleanDeploy) == 1" />
<ItemGroup>
<DeploymentFiles Include="$(PublishFolder)\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(DeploymentFiles)"
DestinationFolder="$(DeployFolder)\%(RecursiveDir)" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="WebPublish" Condition="$(PublishTarget) == 1" />
<CallTarget Targets="Deploy" Condition="$(DeployTarget) == 1" />
</Target>
这个脚本使用$(PublishTarget)和$(DeployTarget)属性在项目构建完成后触发额外的步骤。PropertyGroup在开头将默认值设置为0,因此不会运行额外的目标。您可以在TeamCity中通过进入构建配置的“属性和环境变量”页面并添加系统属性名称“PublishTarget”和“DeployTarget”,并将它们的值设置为1来覆盖默认值。
Publish目标包含大部分的魔法。它调用Visual Studio的_CopyWebApplication目标将网站输出到PublishFolder。默认情况下,发布文件夹相对于项目文件是".. \ Deployment \ YourWebsiteName",但是这也可以用系统属性进行覆盖。Deploy目标获取由Publish目标输出的文件并将其复制到DeployFolder。在TeamCity中,可以使用系统属性设置DeployFolder,或者可以在Deploy目标中替换“Path\To\Your\Server”路径。
您还可以通过将PublishFolder设置为您的部署目标来跳过额外的Deploy步骤。这个脚本依赖于Visual Studio安装的“Microsoft.WebApplication.Build.Tasks.Dll”和“Microsoft.WebApplication.targets”文件,但是您可以将这些文件从开发工作站复制到构建服务器上。默认位置是“C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications”。
ProjectName.Publish.xml
的文件会伴随我的ProjectName.csproj
文件一起出现,并且当TeamCity构建时,该文件被拉入服务器目录。[19:01:02]: [Project "Test.sln" (Rebuild;Publish target(s)):] Project "Test.UI.Web.csproj" (Publish target(s)): [19:01:02]: [Project "Test.UI.Web.csproj" (Publish target(s)):] Skipping unpublishable project.就像这里所说的那样。
您是否尝试直接执行Visual Studio,而不是依赖于MSBuild直接发布项目。MSBuild无法执行某些类型的项目。我曾经在从Team City内构建MSI时遇到类似的问题。由于不知道您的确切设置,因此我猜测了确切的命令行设置。
<PropertyGroup>
<buildconfiguration>Release</buildconfiguration>
<DevEnv>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com</DevEnv>
</PropertyGroup>
<Exec Command="%22$(DevEnv)%22 /build $(buildconfiguration) $(teamcity_build_checkoutDir)\Test.sln /project Test.UI.Web.csproj"/>
TeamCity能否使用sln2008构建运行器发布Web项目 TeamCity能否使用sln2008构建运行器发布Web项目?
您要发布哪种类型的项目?
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/7ec0d942-6354-41c3-9c97-7e7d1f461c29 来自上述链接:
What I discovered is that "Shared-addins" are not publishable
and are distinct and different from document and application level
VSTO addins, which are deployable.
When I rebuilt my application as an application level
VSTO addin, the publish option was available.
http://www.automise.com/Default.aspx?tabid=53&aft=9813 从上面的链接中获取:
Assuming you're using Visual Studio 2008, we're unable to execute the web site
publish feature from FinalBuilder as it's partially implemented by the VS IDE.
You'll need to use to the MSBuild action to compile the application and then
use one of the other actions (FTP, File Copy, etc) in FinalBuilder to perform
the deployment. Visual Studio 2010 has fixed this problem by performing the
entire publish using MSBuild, see this post for more info:
http://www.finalbuilder.com/forums....&afv=topic
这里有两个可能会有帮助的线程
http://devnet.jetbrains.net/thread/280420;jsessionid=5E8948AE810FFFF251996D85E7EB3FE3
对于在VS2010中使用Web应用程序项目的任何人,我成功地将TeamCity配置为在成功构建解决方案后打包交付内容并进行Web部署。
稍加调整后,这与在VS中点击“发布”按钮具有相同的效果。
我的解决方案有几个项目,其中一个是ASP.NET MVC Web应用程序项目。我通过3个步骤构建解决方案,打包Web应用程序项目,并进行msdeploy包部署。我还没有找到更好、更短、更简单或更优雅的方法来完成这个过程。
我的TeamCity服务器上没有安装VS,所以我需要获取C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web和C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web Applications,并将它们放在TeamCity服务器的同一位置(第二个依赖于第一个)。如果你正在使用x64机器,我建议你从Program Files (x86)和Program Files两个文件夹中都获取。你还需要在你的机器上安装Web Deploy和IIS Management Service(即,监听https://yourservername:8172/MsDeploy.axd的服务)。
有3个构建步骤:
在最后一步中,“IIS Web Application Name”是一个实际的参数名称,请勿更改。它的值可以是类似于“Default Web Site”的内容,或者是您在IIS中命名的网站名称和/或其下面的IIS应用程序路径。如果该应用程序不存在,则可能会遇到有关应用程序池未正确配置以托管应用程序的错误。与其调查它,我只是在适当的应用程序池中创建了一个应用程序。在我的情况下,我针对ASP.NET 4.0 x64,其中默认应用程序池为ASP.NET 2.0 x64。