2017-10-10 118 views
0

包装的Web API项目我有一个包含四个项目Visual Studio解决方案:TFS 2017年生成定义:用于部署

1桌面应用; 1 Windows服务; 2个Web API项目。 > 2013 - -

这些项目已经从VS2010迁移> 2017年我已经删除/我承认编辑尽可能多的传统的东西。

的解决方案建立在2017年

罚款我只希望构建Web API项目之一,生成部署包,并发布该数据包为伪影。防粘定义将要使用到的WinRM在Windows Server 2012中的系统运行IIS部署软件包。

在我的构建定义我有一个MSBuild任务。

此任务的参数如下:

  1. 项目设置为
  2. 平台被设置在TFS源控制我的WebAPI的.csproj的路径“AnyCPU” - (“任何CPU”不工作..其已知的(旧)问题)
  3. 配置是 “释放”
  4. MSBuild的论点是:

/p:DeployOnBuild =真/ P:WebPublishMethod =封装 /P:PackageAsSingleFile =真/ P:SkipInvalidConfigurations =真/p:PackageLocation=$(Build.ArtifactStagingDirectory)\webapi.zip

  • 清洁被设定为true
  • 构建成功完成,但是所产生的webapi.zip包包含一个巨大的文件夹结构:

    C:\ agent2_work \ 27 \一个\ webapi.zip \内容\ C_C \ agent2_work \ 27 \ S \ MyProduct.WebApi \ OBJ \发布\包\ PackageTmp

    问题:

    1. 为什么它包装这个完整的路径? (C:\ agent2_work是我的构建代理的目录)
    2. 我该如何改变呢?

    回答

    0

    这是预期的行为,它基于您的包装位置。如果你在VS中发布项目,你会发现类似的文件夹结构。详情请见Create a Web Deployment Package in Visual Studio。和this thread供您参考。

    但是,您可以使用发布配置文件更改MSBuild参数中使用的文件夹结构。继下面的步骤做:

    1,创建发布配置文件。

    要在VS创建Web部署包你 将首先创建一个为发布配置。当您这样做时, .pubxml文件将在 属性\发布配置文件下为您创建。这是您的发布配置文件,它是一个MSBuild文件。您可以通过编辑 此文件来自定义您的发布过程。我们将修改此文件,以便更新包中的这些路径 。

    2,编辑.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,运行构建,然后检查文件夹结构。

    enter image description here

    +0

    安迪,再次感谢您的帮助。非常感激。我正在将软件包部署到使用WinRM的IIS上,并且绝对需要确保我使用正确的,现代的做事方式。 – Scott