如何使用Travis CI构建一个混合(C++ + C#)解决方案?

13

我有一个包含4个项目的解决方案:

  • 一个 C++ .lib "A"
  • 一个基于 SWIG 生成包装器的 C++ .dll "AWrapper"
  • 一个基于 SWIG 生成包装器的 C# .dll "ASharp"
  • 一个 C# 单元测试项目(默认情况下,但我可以将其移植到 NUnit)"ASharpTests"

查看一般文档C# Travis CI 文档C++ 文档后,无法解决这种多语言项目问题。

我可以为 C++ 库和包装器创建 CMake 项目。但接下来该怎么办?如何解决以下问题:

  • 如何仅编译 VS 解决方案中选择的项目?
  • 如何混合多种语言,Travis 配置应该写些什么(2 个 C++ 项目、2 个 C# 项目,运行测试需要从 C++ 代码构建 .so 放在与 C# 测试相同的文件夹中)?
2个回答

3

CI构建工具 - MSBuild

如果您正在使用Visual Studio构建C++/C#/VB/其他解决方案,则应使用MSBuild作为CI构建工具。 请参见:https://msdn.microsoft.com/en-us/library/dd393574.aspx

MSBuild可以用于构建Visual Studio项目文件(.csproj、.vbproj、vcxproj等)。但是,不建议这样做。相反,MSBuild应直接构建Visual Studio解决方案(.sln)。主要原因是这样开发人员使用的Visual Studio IDE和CI系统使用的MSBuild命令行将以完全相同的方式构建解决方案。其次,通过在IDE中使用配置管理器更改项目时,更改配置将在一个且仅一个位置进行。

Configuration Manager

MSBuild XML脚本示例:

<Target Name="BUILD_SOLUTION">         
    <MSBuild Projects="$(SOLUTION_NAME).sln" Properties="Configuration=Release;Platform=Win32"/>
    <MSBuild Projects="$(SOLUTION_NAME).sln" Properties="Configuration=Release;Platform=x64"/>
</Target>

记得设置项目依赖关系并检查项目构建顺序。例如,

  • 在最终EXE项目之前构建通用库;
  • 在相应的生产项目之后构建单元测试项目。

Project Dependencies

Build Order

MSBuild Properties="Configuration=x;Platform=y" 可以映射到 Configuration Manager。请记得设置所有的 Configuration 和 Platform 组合:

  • 如有需要,请为每个项目上下文选择(启用复选框)构建;
  • Deploy 列不使用。

MSBuild 在 GitHub 项目中不可用,而且我需要我的项目跨平台。添加了详细信息。 - DuckQueen
Visual Studio Online可能是适合您的工具。在Visual Studio Online中构建托管在GitHub上的项目:https://msdn.microsoft.com/Library/vs/alm/Build/github/index - Garland
我认为自此答案被发布/采纳以来,时代已经发生了变化。我使用Appveyor编译一个公共的C++项目,使用批处理脚本和CMake项目生成的混合方式。当项目生成后,我会构建特定的目标。例如:cmake --build <build_dir> --target INSTALL --config Release|Debug。这是我在AppVeyor上运行的项目:https://github.com/SuperEvenSteven/PSMoveSteamVRBridge/blob/master/build.bat - JavaJedi

0

我建议您将Travis配置设置为C#(即language: csharp)。这样,您的项目将在C#环境中集成所有必要的工具。对于您的两个C++项目,安装必需的工具不应该太困难。只需要执行sudo apt-get install g++ cmake(和其他所需的软件包)即可。您需要在.travis文件的install部分执行此操作。

注意:安装缺少的软件包的确切方式可能会有所不同,具体取决于您使用基于Docker的Travis基础设施还是传统基础设施

然后,在script部分,您可以使用cmake构建c++项目,然后构建C#项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接