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

时间:2015-10-06 22:54:43

标签: c# c++ visual-studio travis-ci

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

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

查看general documentationC# Travis CI docsC++ docs无法解决如何解决此类多语言项目问题。

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

  • 如何仅从VS解决方案中编译选定的项目?
  • 如何混合多种语言,应该写入Travis配置(2个C ++项目,2个C#项目,运行测试a .so构建C ++代码必须与C#测试位于同一文件夹中)?

2 个答案:

答案 0 :(得分: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(由开发人员使用)和MSBuild命令行(由CI系统使用)以完全相同的方式构建解决方案。其次,在IDE中使用Configuration Manager更改项目时,更改配置将只在一个位置。

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。请记住设置所有配置和平台组合:

  • 如果需要,选择(启用复选框)为每个项目上下文构建;
  • 未使用部署列。

答案 1 :(得分:0)

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

注意:安装缺失软件包的确切方式可能会有所不同,具体取决于您使用the docker-based Travis infrastructure还是the legacy one

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