繁体   English   中英

TFS 2017 构建定义:打包 Web API 项目以进行部署

[英]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 任务。

该任务的参数如下:

  1. 项目设置为我的 webAPI .csproj 在 TFS 源代码控制中的路径
  2. 平台设置为“AnyCPU”-(“Any CPU”不起作用......这是一个已知(旧)问题)
  3. 配置是“发布”
  4. MSBuild 参数是:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.ArtifactStagingDirectory)\\webapi.zip

  1. 清洁设置为真

构建成功完成,但是生成的 webapi.zip 包包含大量文件夹结构:

C:\\agent2_work\\27\\a\\webapi.zip\\Content\\C_C\\agent2_work\\27\\s\\MyProduct.WebApi\\obj\\release\\Package\\PackageTmp

问题:

  1. 为什么要打包这个完整的路径? (c:\\agent2_work 是我的构建代理目录)
  2. 我该如何更改?

这是预期的行为,它基于您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM