Asp.net web api TFS 2017构建定义:打包用于部署的Web API项目
我有一个包含四个项目的Visual Studio解决方案: 1个桌面应用程序; 1.Windows服务; 2个Web API项目 这些项目已从VS2010->2013->2017迁移。我已经删除/编辑了尽可能多的遗留内容 该解决方案在2017年构建良好 我只希望构建一个webapi项目,生成一个部署包,并将该包作为工件发布。发布定义将使用WinRM在运行IIS的Windows Server 2012系统上部署包 在生成定义中,我有一个MSBuild任务 此任务的参数如下所示:Asp.net web api TFS 2017构建定义:打包用于部署的Web API项目,asp.net-web-api,tfs,msbuild,visual-studio-2017,Asp.net Web Api,Tfs,Msbuild,Visual Studio 2017,我有一个包含四个项目的Visual Studio解决方案: 1个桌面应用程序; 1.Windows服务; 2个Web API项目 这些项目已从VS2010->2013->2017迁移。我已经删除/编辑了尽可能多的遗留内容 该解决方案在2017年构建良好 我只希望构建一个webapi项目,生成一个部署包,并将该包作为工件发布。发布定义将使用WinRM在运行IIS的Windows Server 2012系统上部署包 在生成定义中,我有一个MSBuild任务 此任务的参数如下所示: 项目设置为TFS源
这是预期的行为,它基于您的包位置。如果在VS中发布项目,您将发现类似的文件夹结构。有关详细信息,请参阅。供您参考 但是,您可以使用MSBuild参数中使用的发布配置文件更改文件夹结构。要做到这一点,请执行以下步骤: 1,创建发布配置文件。 在VS中创建web部署包 将首先为此创建发布配置文件。当你这样做的时候,一个 将在下为您创建
.pubxml
文件
属性\发布配置文件。这是您的发布配置文件,它是一个MSBuild文件。您可以通过编辑自定义发布过程
这个文件。我们将修改此文件以更新这些路径
在包裹里
2,编辑配置文件的.pubxml
文件,并在之前添加以下内容
关闭
标记。(创建目标AddReplaceRuleForAppPath
,并通过将其添加到PackageDependsOn
属性将其注入包进程。执行此目标后,将向MSDeployReplaceRules项目组添加替换规则。)
5、运行生成,然后检查文件夹结构。
为了让事情变得简单一点,我刚刚创建了一个nuget包,可以自动为您执行这些步骤。看
只要从Visual Studio将其安装到web应用程序项目中,只需一个单词“web”,即可更改“内容”下面的长路径。Andy,再次感谢您的帮助。非常感谢。我正准备用WinRM将软件包部署到IIS,我绝对需要确保我使用的是正确、现代的方式。我正在努力解决这个问题。使用这些参数运行msbuild:/p:DeployOnBuild=true/p:WebPublishMethod=Package/p:PackageAsSingleFile=true/p:PublishProfile=CIProfile/p:SkipinValidConfiguration=true/p:PackageLocation=“c:\temp\publish”/p:platform=“任意cpu”/p:configuration=“Release”-看起来没有什么不同。我最终还是得到了一个具有巨大目录结构的zip文件。
<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>
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:PublishProfile=1011DP /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.ArtifactStagingDirectory)