c# - 结合适用于本地和 Azure DevOps 的 C++ 和 C# 项目的最佳方式?

标签 c# c++ visual-studio azure-devops

我有时通过 P/Invoke 将原生 C++(不是 C++/CLI 或 C++/CX,只是 C++)和 C# 项目结合起来。
我曾经使用过这样的配置:

  • 制作 C++ dll 项目。 (项目)
  • 将 ProjA 的目标名称更改为 $(ProjectName)_d仅在调试配置上。
  • 在调试和发布中构建一次 ProjA - $(SolutionDir)Release\ProjA.dll$(SolutionDir)Debug\ProjA_d.dll将被制作。
  • 制作 C# 项目。 (ProjB) 开关dllNameDllImport通过使用 #if DEBUG .
  • 添加 ProjA.dllProjA_d.dll (和 *.pdb )到 ProjB 作为链接。
  • 让 ProjB 在配置管理器中为 x86 构建。
  • 添加构建依赖。

  • 然后一切都很顺利。 ProjB 检测 ProjA 中的变化。

    但是,在 Azure DevOps 中,它无法构建,因为 ProjA_d.dll不是在发布版本中创建的(需要第 3 步。)
    如果存在,我想告诉常见的方法。还是我必须编写构建事件并制作虚拟文件?

    最佳答案

    您可以在构建管道中添加三个构建任务,并为每个构建任务配置正确的项目路径和配置,一个使用调试配置构建 c++ 项目,一个使用发布配置构建,另一个构建 c#。请引用下面的截图。

    enter image description here

    根据需要配置每个构建任务。 将项目指向您要构建的特定项目的路径 .请引用下面的例子。

    enter image description here

    解决方案

    # set env and vars
    
    - task: MSBuild@1
      inputs:
        solution: 'ProjA1/ProjA1.vcxproj'
        platform: '$(buildPlatform)'
        configuration: 'Debug'
    
    - task: MSBuild@1
      inputs:
        solution: 'ProjA1/ProjA1.vcxproj'
        platform: '$(buildPlatform)'
        configuration: 'Release'
    
    - task: CmdLine@2
      inputs:
        script: |
            xcopy /I /E /Y ProjA1\Debug Debug
            xcopy /I /E /Y ProjA1\Release Release
    
    - task: MSBuild@1
      inputs:
        solution: 'ProjA2/ProjA2.vcxproj'
        platform: '$(buildPlatform)'
        configuration: 'Debug'
    
    - task: MSBuild@1
      inputs:
        solution: 'ProjA2/ProjA2.vcxproj'
        platform: '$(buildPlatform)'
        configuration: 'Release'
    
    
    - task: CmdLine@2
      inputs:
        script: |
            xcopy /I /E /Y ProjA2\Debug Debug
            xcopy /I /E /Y ProjA2\Release Release
    
    - task: VSBuild@1
      inputs:
        solution: '$(solution)'
        platform: '$(buildPlatform)'
        configuration: '$(buildConfiguration)'
    
    # tests
    

    关于c# - 结合适用于本地和 Azure DevOps 的 C++ 和 C# 项目的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367031/

    相关文章:

    c# - 使用 System.Net.Http 调用 Delete Web API 方法时传递正文内容

    c# - 遍历 List<interface> 项

    visual-studio - complus异常代码-532462766

    visual-studio - VS 代码 "Can not resolve workspace folder"

    c++ - 基类构造函数对派生类 C++ 不可见

    asp.net - 如何在 Visual Studio 2015 中隐藏设计/拆分/源代码栏?

    c# - 获取盒装枚举的积分值

    c# - API:C# 方法命名约定:GetPageCount 或 GetTotalPages

    c++ - 计算 2 的幂的意外结果 [C++]

    c++ - 如果嵌套对象具有相同的地址,编译器如何区分它们?