如何在Visual Studio 2017 中使用Resource Group 项目自动部署Function App 内容?

How to automatically deploy Function App contents using Resource Group project in Visual Studio 2017?

有关于如何自动部署 Web 应用程序的非常好的说明 - 创建所需的基础结构和部署 Web 应用程序内容。 例如,这描述得很好 here

但是,我找不到任何关于如何为函数应用程序完成此操作的详细说明。

我的情况是什么:

当我部署资源组时失败并显示消息 "The target "Package" does not exist in the project."

这意味着它无法构建 ZIP 包。

如果我从 "Include Targets" 中删除 "Package" 参数,然后手动将 "package.zip" 提供给资源组项目,一切正常。

Resource Group项目应该如何配置才能自建Function App项目的ZIP包?

是否可以在函数应用项目中添加一个"Package"目标?

非常感谢!

如果您预先采用 Azure Devops 并使用 CI/CD 管道自动执行此过程,您将处于一个更好的位置。

我过去通过将部署分为三个步骤来完成许多这样的工作(我的项目往往有一个调用该函数的逻辑应用程序):

  1. 有一个ARM模板,其中包含除逻辑应用之外的所有资源组内容。首先使用 resource group deployment task
  2. 部署它
  3. 使用 app service deployment task 发布构建过程中生成的 zip 文件。这将创建在部署逻辑应用程序之前需要存在的函数应用程序端点
  4. 使用另一个资源组部署步骤从单独的 ARM 模板部署逻辑应用

我知道逻辑应用程序部分超出了您在问题中定义的范围,因此在您的情况下,您只需省略第三步。

即使只有一个简单的功能应用程序部署,我仍然认为拥有 CI/CD 管道将使您的生活在漫长的 运行 中变得更轻松。

Kloud blog just added a great write up of how to do this

我设法找到了一种解决方法,它实际上非常优雅且非常简单。
希望这对其他人有帮助:
1.在Function App项目
上安装"MSBuildTasks" NuGet package 2. 打开编辑Function App工程的.csproj文件,在<Project>元素中添加如下内容:

<Project>
  ...
  <Import Project="$(ProjectDir)obj\FunctionApp.csproj.nuget.g.targets" />
  <ItemGroup>
    <ProjectFiles Include="$(OutDir)\**\*.*" />
  </ItemGroup>
  <Target Name="Package">
    <Zip Files="@(ProjectFiles)" WorkingDirectory="$(OutDir)" ZipFileName="$(PackageLocation)" />
  </Target>

</Project>
  1. 上面代码段中的重要部分如下。他们帮助将目标绑定到资源组项目(参见问题中的图片):
    • Target的名字应该是"Package",被Resource Group Project
    • 调用
    • 资源组项目
    • 传递的$(PackageLocation)属性的用法

This blog post helped me.

基于 Vladislav 的非常有帮助的完整答案...

MSBuildTasks nuget 部署中的错误阻止了它的安装,如 .Net Core 项目的项目站点上所记录的那样。 .build 文件夹永远不会被创建。

如果您将 MSBuildTasks,版本 1.4.0.128 添加到解决方案中的 .Net Framework 项目,您可以使用网站上所述的导入:

  <PropertyGroup>
    <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
  </PropertyGroup>

  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />