首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSBuild在发布前执行OctoPack

MSBuild在发布前执行OctoPack
EN

Stack Overflow用户
提问于 2018-02-01 12:47:24
回答 2查看 1.3K关注 0票数 2

我有一个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包构建步骤再次构建OctoPack,我成功地解决了这个问题。我还必须在项目根目录中创建一个*.nuspec文件,在这里我告诉NuGet包包含所有内容(参见下面),因为仅使用*.csproj文件也忽略了额外的文件夹/文件。

代码语言:javascript
复制
<files>
    <file src="bin\Release\net461\**\*.*" />
</files>

这是因为它在MSBuild步骤之后运行,并且存在额外的文件夹/文件。它还将足够强大,以支持其他功能时,增加到项目前进。

这一额外步骤和*.nuspec文件的需要似乎是不必要的。有人能看到我哪里出错了吗?为什么MSBuild的发布顺序和OctoPak顺序都错了?

EN

回答 2

Stack Overflow用户

发布于 2018-02-05 20:14:05

  1. 这可能是一个原因:

如果该部分存在,OctoPack默认不会尝试将任何额外的文件自动添加到您的包中,因此您需要明确说明要包含哪些文件。您可以使用/p:OctoPackEnforceAddingFiles=true重写此行为,该行为将指示OctoPack使用其约定和您节定义的文件的组合打包文件。 https://octopus.com/docs/packaging-applications/creating-packages/nuget-packages/using-octopack

  1. 另一个想法-破碎的.csproj文件。请检查一下。 也许,在合并过程中,这两行被重新排序: 首先应该有Microsoft.CSharp.targets。秩序很重要。
票数 0
EN

Stack Overflow用户

发布于 2018-12-18 20:25:20

解决办法:发布后运行OctoPack

代码语言:javascript
复制
<Target Name="SetRunOctoPack">
    <PropertyGroup>
      <RunOctoPack>true</RunOctoPack>
    </PropertyGroup>
</Target>

<Target Name="AfterPublish" DependsOnTargets="SetRunOctoPack">
  <CallTarget Targets="OctoPack"/>
</Target>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48563146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档