c++ - 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
任务,它们都产生相同的错误。如果我将配置设置为Release
and Any CPU
,则MPWrap
找不到命名空间。
如果我将配置设置为Release|x86
或 Release|x64`,则构建会尝试构建 Visual c++ 项目并给我一个错误,即找不到源代码文件。当我在本地构建时,源代码文件不存在。
我不确定还可以尝试什么,而且供应商没有将其部署到 azure 功能的经验。这通常部署到具有完整文件系统的 Windows 服务器。
有什么方法可以让我的构建从 Visual C++ 项目中获取 dll 而无需尝试构建它?
解决方案
我也尝试过 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.targets
和xx.props
. 详情可以参考这个案例。
推荐阅读
- html - Vue.JS 和数字/标题
- mongodb - 尝试在 macOS 上安装 MongoDB 时“未找到类似名称的公式”
- salesforce - Account Docusign 中的收件人自定义按钮
- python - ANOVA 组间和组内自由度
- python - Nginx/PHP-FPM/Laravel 无法处理单个 IP 的并发请求
- python - 如何在 Gekko-python 中获取决策变量的值
- arrays - 如何将二维数组从 Swift 传递到 Objective-C?
- css - 如何使用 React JS 动态应用 CSS 样式?
- python - Python:IF 内的函数。问题
- node.js - 如何使用 Nodejs 而不是 bash 创建全局可用的 shell 脚本?