MSBuild 在发布之前做 OctoPack

Posted

技术标签:

【中文标题】MSBuild 在发布之前做 OctoPack【英文标题】:MSBuild doing OctoPack before Publish 【发布时间】:2018-02-01 12:47:24 【问题描述】:

我有一个 C# .NET v4.6.1 编译的 Azure 函数,我正在使用 Microsoft.NET.Sdk.Functions 并使用我常用的 CI/CD 管道部署它。

也就是说,创建 OctoPack 的 TeamCity MSBuild 构建步骤(因为我已经安装了 OctoPack 3.6.3 NuGet package. 然后我将生成的 *.nupkg 文件发布到 Octopus 并创建一个版本。

这就是我执行所有 Azure 应用程序服务的方式,但是正如 this post 中很好地描述的那样,已编译的 Azure Functions 在发布时会创建一些额外的文件/文件夹来描述函数的入口点。

我可以看到(在 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 似乎有 Publish 和 OctoPak 的顺序错误?

【问题讨论】:

我的回答对您解决问题有帮助吗? 这里有同样的问题。我尝试指定要包含的文件,但出现错误OCTONUGET Could not find a part of the path *** 【参考方案1】:
    这可能是一个原因:

如果该部分存在,OctoPack 默认不会尝试 自动将任何额外文件添加到您的包中,因此您需要 明确说明您要包含哪些文件。您可以覆盖 /p:OctoPackEnforceAddingFiles=true 的这种行为将 指示 OctoPack 使用其打包文件组合 约定,以及由您的部分定义的约定。

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

    另一个想法——损坏的.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。订单很重要。

【讨论】:

感谢@Vladimir 的回复,因为它是已编译的Azure 函数,项目文件不是典型的.NET Standard .csproj,因此没有导入语句。 code net461 ... code【参考方案2】:

解决方法:发布后运行 OctoPack

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

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

【讨论】:

以上是关于MSBuild 在发布之前做 OctoPack的主要内容,如果未能解决你的问题,请参考以下文章

UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

使用 vc2010 和 msbuild 的多个构建规则

NuGet 自动包还原不适用于 MSBuild

如何真正改变 MSBuild 输出/消息语言?

如何在 MSVS 开发提示之外运行 MSBuild?

使用 MsBuild 发布数据库项目