首页 > 解决方案 > Azure Function 项目在本地构建和部署,但不是来自 azure dev ops 管道

问题描述

我有一个 azure 函数项目,版本 3,使用 .net core 3.1。在项目中,我有一个 Visual c++ 项目,其中包含我的项目所需的 dll。根据供应商,我已在我的项目中添加了 Visual c++ 项目,并且 .vcxproj 文件包含在我的项目中作为参考。所以文件结构是 /my project/projects/MPWrap/.vcxproj. 下面是我从我的 net core .csproj 文件中引用 Visual C++ 项目的方法。

<ItemGroup>
  <ProjectReference Include="projects\MPWrap\MPWrap.vcxproj" />
</ItemGroup>

在这个 Visual c++ 项目中,有一个 Release 文件夹,其中包含几个文件,包括我的项目所需的 .dll 文件。此项目中没有源代码文件。

在我的解决方案配置屏幕中,我没有为此 MPWrap 项目选中构建复选框。这是我的解决方案配置 在此处输入图像描述

我可以使用 Visual Studio 从本地计算机部署到 Azure Function。这是我使用 Visual Studio 进行 Web 部署的配置文件设置。 在此处输入图像描述

当我尝试使用 Azure 开发操作管道进行部署时,构建失败。我已经尝试了多次配置迭代。当我尝试使用DotNetCoreCLI@2任务时,我收到一个错误,它无法找到.vcxproj文件中的元素,特别是D:\Microsoft.Cpp.Default.props. 我认为这是由于项目正在建设的地方,它找不到这些值,因为它们不存在。

我也尝试过MSBuild任务和VSBuild任务,它们都产生相同的错误。如果我将配置设置为Releaseand Any CPU,则MPWrap找不到命名空间。

如果我将配置设置为Release|x86或 Release|x64`,则构建会尝试构建 Visual c++ 项目并给我一个错误,即找不到源代码文件。当我在本地构建时,源代码文件不存在。

我不确定还可以尝试什么,而且供应商没有将其部署到 azure 功能的经验。这通常部署到具有完整文件系统的 Windows 服务器。

有什么方法可以让我的构建从 Visual C++ 项目中获取 dll 而无需尝试构建它?

标签: c++visual-studio.net-coreazure-devopsmsbuild

解决方案


我也尝试过 MSBuild 任务和 VSBuild 任务,它们都产生相同的错误。如果我将配置设置为 Release 和 Any CPU,则找不到 MPWrap 命名空间。

如果我将配置设置为 Release|x86 或 Release|x64`,则构建会尝试构建 Visual c++ 项目并给我一个错误,即找不到源代码文件。当我在本地构建时,源代码文件不存在。

根据您的描述,您是否正在修改解决方案配置?

1.如果是这样,你应该确保你的.NET核心项目可以找到引用的MPWrap.dll。您可以在解决方案配置中启用 MPWrap 项目的构建复选框,然后使用 VSBuild 任务构建具有 Release+Any CPU 的整个解决方案。这样两个项目都能成功构建。

2.或者您应该将生成的MyWrap.dll、MyWrap.h 添加到Git 源代码管理中,然后在.NET core 项目中通过类似.NET 的代码引用这些程序集DllImport。然后,当使用 Release+Any CPU 构建您的 .NET 核心项目时,您的 C++ 项目将不会被构建,您的 .NET 核心项目仍然可以引用 git repo 下的 MPWrap.dll。

另外,dotnet build目前不支持构建 C++ 项目,导致 dotnet cli 不知道在哪里可以找到必要的 C++xx.targetsxx.props. 详情可以参考这个案例


推荐阅读