如何解决如何使用 msbuild 发布网页?
我主要是在没有自定义 msbuild 脚本的情况下工作。以下是相关的 TeamCity 构建配置设置:
工件路径:%system.teamcity.build.workingDir%\MyProject\obj\Debug\Package\PackageTmp
运行器类型:MSBuild(用于 MSBuild 文件的运行器)
构建文件路径:MyProject\MyProject.csproj
工作目录:与结帐目录相同
MSBuild 版本:Microsoft .NET Framework 4.0
MSBuild 工具版本:4.0
运行平台:x86
目标:包
MSBuild.exe 的命令行参数:/p:Configuration=Debug
这将编译、打包(使用 web.config 转换)并将输出保存为工件。唯一缺少的是将输出复制到指定位置,但这可以在另一个带有工件依赖项的 TeamCity 构建配置中完成,也可以使用 msbuild 脚本完成。
这是一个 msbuild 脚本,它将编译、打包(使用 web.config 转换)并将输出复制到我的登台服务器
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<SolutionName>MySolution</SolutionName>
<SolutionFile>$(SolutionName).sln</SolutionFile>
<ProjectName>MyProject</ProjectName>
<ProjectFile>$(ProjectName)\$(ProjectName).csproj</ProjectFile>
</PropertyGroup>
<Target Name="Build" DependsOnTargets="BuildPackage;CopyOutput" />
<Target Name="BuildPackage">
<MSBuild Projects="$(SolutionFile)" ContinueOnError="false" Targets="Rebuild" Properties="Configuration=$(Configuration)" />
<MSBuild Projects="$(ProjectFile)" ContinueOnError="false" Targets="Package" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="CopyOutput">
<ItemGroup>
<PackagedFiles Include="$(ProjectName)\obj\$(Configuration)\Package\PackageTmp\**\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\build02\wwwroot\$(ProjectName)\$(Configuration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
</Project>
您还可以从 PropertyGroup 标记中删除 SolutionName 和 ProjectName 属性并将它们传递给 msbuild。
msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject
由于这个问题仍然有很多流量,我认为值得用我当前使用Web 部署(也称为 MSDeploy)的脚本来更新我的答案。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<ProjectFile Condition=" '$(ProjectFile)' == '' ">$(ProjectName)\$(ProjectName).csproj</ProjectFile>
<DeployServiceUrl Condition=" '$(DeployServiceUrl)' == '' ">http://staging-server/MSDeployAgentService</DeployServiceUrl>
</PropertyGroup>
<Target Name="VerifyProperties">
<!-- Verify that we have values for all required properties -->
<Error Condition=" '$(ProjectName)' == '' " Text="ProjectName is required." />
</Target>
<Target Name="Build" DependsOnTargets="VerifyProperties">
<!-- Deploy using windows authentication -->
<MSBuild Projects="$(ProjectFile)"
Properties="Configuration=$(Configuration);
MvcBuildViews=False;
DeployOnBuild=true;
DeployTarget=MSDeployPublish;
CreatePackageOnPublish=True;
AllowUntrustedCertificate=True;
MSDeployPublishMethod=RemoteAgent;
MsDeployServiceUrl=$(DeployServiceUrl);
SkipExtraFilesOnServer=True;
UserName=;
Password=;"
ContinueOnError="false" />
</Target>
</Project>
在 TeamCity
中,我有名为env.Configuration
和env.ProjectName
的参数env.DeployServiceUrl
。MSBuild
运行器具有构建文件路径,并且参数自动传递(您不必在命令行参数中指定它们)。
您也可以从命令行运行它:
msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService
解决方法
Visual Studio 2010 有一个发布命令,允许您将 Web 应用程序项目发布到文件系统位置。我想在我的 TeamCity
构建服务器上执行此操作,因此我需要使用解决方案运行程序或 msbuild 执行此操作。我尝试使用 Publish 目标,但我认为这可能适用于
ClickOnce:
msbuild Project.csproj /t:Publish /p:Configuration=Deploy
我基本上想做一个 Web 部署项目所做的事情,但没有插件。我需要它来编译 WAP、删除任何不需要执行的文件、执行任何web.config
转换并将输出复制到指定位置。
我的解决方案 ,基于 Jeff Siver 的回答
<Target Name="Deploy">
<MSBuild Projects="$(SolutionFile)"
Properties="Configuration=$(Configuration);DeployOnBuild=true;DeployTarget=Package"
ContinueOnError="false" />
<Exec Command=""$(ProjectPath)\obj\$(Configuration)\Package\$(ProjectName).deploy.cmd" /y /m:$(DeployServer) -enableRule:DoNotDeleteRule"
ContinueOnError="false" />
</Target>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。