[英]TFS 2017 Build Definition: Packaging Web API Project for deployment
我有一个包含四个项目的 Visual Studio 解决方案:
1个桌面应用程序; 1个视窗服务; 2 Web API 项目。
这些项目已从 VS2010 -> 2013 -> 2017 迁移。我已经删除/编辑了我所认识的尽可能多的遗留内容。
该解决方案在 2017 年构建良好。
我希望只构建一个 Web API 项目,生成一个部署包,并将该包作为工件发布。 发布定义将使用 WinRM 在运行 IIS 的 Windows Server 2012 系统上部署包。
在我的构建定义中,我有一个 MSBuild 任务。
该任务的参数如下:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.ArtifactStagingDirectory)\\webapi.zip
构建成功完成,但是生成的 webapi.zip 包包含大量文件夹结构:
C:\\agent2_work\\27\\a\\webapi.zip\\Content\\C_C\\agent2_work\\27\\s\\MyProduct.WebApi\\obj\\release\\Package\\PackageTmp
问题:
这是预期的行为,它基于您的Package Location 。 如果你在VS中发布项目,你会发现类似的文件夹结构。 有关详细信息,请参阅在 Visual Studio 中创建 Web 部署包。 和这个线程供您参考。
但是,您可以使用 MSBuild 参数中使用的发布配置文件更改文件夹结构。 请按照以下步骤执行此操作:
1、创建发布配置文件。
要在 VS 中创建 Web 部署包,您首先要为此创建一个发布配置文件。 执行此操作时,将在Properties\\PublishProfiles下为您创建一个.pubxml
文件。 这是您的发布配置文件,它是一个 MSBuild 文件。 您可以通过编辑此文件来自定义发布过程。 我们将修改此文件以更新包中的这些路径。
2、编辑.pubxml
文件的.pubxml
文件并在结束</Project>
标记之前添加以下内容。 (创建目标AddReplaceRuleForAppPath
,并通过将其添加到PackageDependsOn
属性将其注入包进程。执行此目标后,它将向 MSDeployReplaceRules 项组中添加替换规则。)
<PropertyGroup>
<PackagePath Condition=" '$(PackagePath)'=='' ">WebApi</PackagePath>
<EnableAddReplaceToUpdatePacakgePath Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='' ">true</EnableAddReplaceToUpdatePacakgePath>
<PackageDependsOn>
$(PackageDependsOn);
AddReplaceRuleForAppPath;
</PackageDependsOn>
</PropertyGroup>
<Target Name="AddReplaceRuleForAppPath" Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='true' ">
<PropertyGroup>
<_PkgPathFull>$([System.IO.Path]::GetFullPath($(WPPAllFilesInSingleFolder)))</_PkgPathFull>
</PropertyGroup>
<!-- escape the text into a regex -->
<EscapeTextForRegularExpressions Text="$(_PkgPathFull)">
<Output TaskParameter="Result" PropertyName="_PkgPathRegex" />
</EscapeTextForRegularExpressions>
<!-- add the replace rule to update the path -->
<ItemGroup>
<MsDeployReplaceRules Include="replaceFullPath">
<Match>$(_PkgPathRegex)</Match>
<Replace>$(PackagePath)</Replace>
</MsDeployReplaceRules>
</ItemGroup>
</Target>
3、保存发布配置文件并签入更改
4、在下面的 MSBuild 参数中输入:(在这个例子中我的发布配置文件名称是1011DP.pubxml
)
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:PublishProfile=1011DP /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.ArtifactStagingDirectory)
5、运行构建,然后检查文件夹结构。
为了让事情更容易一些,我刚刚创建了一个 nuget 包,它会自动为您执行这些步骤。 请参阅https://www.nuget.org/packages/SharpSvn.ShortMSDeployWebContentPath
只需在 Visual Studio 的 Web 应用程序项目中安装它,就会更改“Contents”下方的长路径,仅包含一个单词“web”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.