2017-10-10 122 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