簡體   English   中英

MSBuild在發布前執行OctoPack

[英]MSBuild doing OctoPack before Publish

我有一個C#.NET v4.6.1編譯的Azure函數,我正在使用Microsoft.NET.Sdk.Functions,並使用我通常的CI / CD管道部署它。

也就是說,執行TeamCity MSBuild構建步驟來創建OctoPack(因為我已經安裝了OctoPack 3.6.3 NuGet軟件包 。然后,我將生成的* .nupkg文件發布到Octopus並創建發行版。

這是我做我所有的Azure的應用服務,然而由於中很好地描述了這個帖子 ,編譯Azure的功能創建了一些額外的文件/文件夾時,他們發表描述入口點函數。

我可以看到(在TeamCity構建日志中),這些額外的文件/文件夾是由MSBuild(15.3.409.57025)創建的,但是只有在它准備好OctoPack之后。 意味着我的OctoPack工件不包含帶有function.json文件或functionsSdk.out的必需的特定於函數的文件夾。

通過設法完成一個額外的TeamCity NuGet Pack構建步驟來再次構建OctoPack,我設法解決了這個問題。 我還必須在項目根目錄中創建一個* .nuspec文件,在這里我告訴NuGet Pack包括所有內容(請參見下文),因為僅使用* .csproj文件也忽略了多余的文件夾/文件。

<files>
    <file src="bin\Release\net461\**\*.*" />
</files>

之所以有效,是因為它在MSBuild步驟之后運行,並且存在額外的文件夾/文件。 當將來添加到項目中時,它還將足夠強大以支持其他功能。

似乎不需要此額外步驟和* .nuspec文件。 誰能看到我哪里出了問題,為什么MSBuild的發布和OctoPak序列似乎出錯了?

  1. 這可能是一個原因:

如果該部分存在,則默認情況下,OctoPack不會嘗試將任何其他文件自動添加到您的程序包中,因此您需要明確說明要包括哪些文件。 您可以使用/ p:OctoPackEnforceAddingFiles = true覆蓋此行為,該行為將指示OctoPack使用其約定以及您的部分定義的約定來打包文件的組合。

https://octopus.com/docs/packaging-applications/creating-packages/nuget-packages/using-octopack

  1. 另一個想法-損壞的.csproj文件。 請檢查一下。

    也許在合並期間,這兩行被重新排序:

     <Import Project="$(MSBuildToolsPath)\\Microsoft.CSharp.targets" /> <Import Project="..\\packages\\OctoPack.3.6.3\\build\\OctoPack.targets" Condition="Exists('..\\packages\\OctoPack.3.6.3\\build\\OctoPack.targets')" /> 

    首先應該有Microsoft.CSharp.targets 順序很重要。

解決方法:發布后運行OctoPack

<Target Name="SetRunOctoPack">
    <PropertyGroup>
      <RunOctoPack>true</RunOctoPack>
    </PropertyGroup>
</Target>

<Target Name="AfterPublish" DependsOnTargets="SetRunOctoPack">
  <CallTarget Targets="OctoPack"/>
</Target>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM