[英]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.