构建“本机代码+包装器+托管代码”项目

时间:2012-04-09 18:08:20

标签: c# c++ c++-cli build-automation

我有复合项目,其中包含:Linux / Windows的C ++库,基于Windows的C ++库源的C ++ / CLI库,基于Windows的C ++ / CLI库的C#项目,基于Linux / Windows的C ++库的C ++项目。如何建立这种项目?我需要选择什么构建系统?

现在我使用CMake在Linux中生成makefile,在Windows中生成MSVS解决方案,但是为构建C#项目编写CMakeLists.txt非常困难。

在我有两个MSVS解决方案之前:for managed(由cmake配置)和native(由cmake生成)代码项目。管理项目是在MSVS中编写的。原生项目在CMakeLists.txt中编写。 CMake正在配置使用Windows环境变量的托管项目,这些变量保留了到外部库,输出目录等的路径。当然这是一个糟糕的决定。

2 个答案:

答案 0 :(得分:0)

MSBuild是一个不错的构建脚本工具,可以很好地与Visual Studio项目文件(本质上是MSBuild脚本)集成。如果你以前从未使用它,可能会有一些学习曲线,但除此之外,使用它来构建.NET项目非常简单。

使用MSBuild脚本构建Visual Studio项目的示例:

<!-- Compile a C# project and output to a staging directory -->
<MSBuild Projects="MyCsProject\MyCsProject.csproj" Properties="outDir=Staging\bin\MyCsProject" />

<!-- Compile a C++/CLI project and output to a staging directory, then re-sign it -->
<MSBuild Projects="MyCppProject\MyCppProject.vcxproj" Properties="outDir=Staging\bin\MyCppProject" />
<Exec Command="&quot;$(WindowsSDKDirectory)\Bin\sn.exe&quot; -Rc Staging\bin\MyCppProject\MyCppProject.dll $(StrongNameKeyContainer)" />

如果您使用的是Visual Studio Professional或更高版本,那么您可以拥有一个包含C#项目和C ++ / CLI项目的解决方案文件,因此在Visual Studio中构建所有内容相当容易。

但是,如果您使用的是Visual Studio的Express版本,那么您可能希望使用MSBuild(或其他构建脚本工具),因为您不能在同一解决方案中使用C ++ / CLI项目。使用Express版本的C#项目,因此您需要一个可以一步编译所有各种项目的MSBuild脚本。

我遇到过C ++ / CLI项目的一个问题是签名。如果您需要签署C ++ / CLI程序集,那么您需要在MSBuild脚本中添加一个步骤,以便在使用“sn”工具(应该是Windows SDK的一部分)之后重新签署C ++ / CLI程序集。它已被编译。如果您使用的是.snk.pfx文件,则需要使用“sn”工具首先将该密钥添加到密钥容器(使用-i开关),然后您将需要使用该密钥容器当您重新签署程序集时(使用-Rc开关)。

答案 1 :(得分:0)

我目前正在一个拥有C ++,CLI和C#的项目中工作,而C ++也在iOS应用程序中使用。我们在Windows上设置它的方式是我们在自己的项目中使用每种语言,然后在一个解决方案中使用所有项目,这样我们就可以通过IDE一步编译所有项目。所有依赖关系等都由VS管理。我认为让VS设置所有依赖项的简单性远远超过了为C ++文件制作项目的额外工作。对于iOS,我有一个单独的Xcode项目,可以为iOS构建所有C ++内容,同样你也有一个适用于Windows的CMake项目。