从VS2008中的csproj调用C ++ LINK

时间:2011-10-12 09:35:42

标签: .net visual-studio msbuild linker csproj

我有兴趣将单个.cpp文件(包含本机代码和托管代码)组合到一个更大的C#项目中。我不想为CPP代码使用单独的DLL,因为仅仅为几行代码“浪费”整个DLL似乎很愚蠢,并且因为代码具有一些安全功能,我宁愿混淆通过将其隐藏在更大的组件中来实现。 (在有人建议之前,我不能使用ILmerge或AL,因为它们不适用于本机代码。)

编译.cpp和.cs文件组的基本过程已被覆盖了几次;领先的候选人建议似乎是:

然而,这些(以及我能找到的所有相关链接)都只涉及在命令行上构建。

我宁愿改变我现有的.csproj文件来编译和链接C ++代码(我不介意C ++构建本身在一个单独的.vcproj中,但如果不是更好,但链接必须在.csproj),并且可以在VS2008中构建所有内容,以便项目用户不需要知道差异。

不幸的是,我似乎无法从VS编译的.csproj中成功调用link.exe。带有“链接”的“Exec”元素找不到可执行文件,因为它不在PATH中。明确指定位置(“$(DevEnvDir).... \ VC \ bin \ link”)确实开始运行它但它立即失败并显示错误代码,指示它无法加载它需要的库(可能是因为再次,它不在PATH中。

是否有任何从Visual Studio中的csproj成功调用LINK的示例?


编辑:好的,我现在已经设法解决了这个问题,并且所有内容都在编译,链接和正常运行 - 在发布模式下。它似乎仍然在调试模式下运行正常,但由于某种原因,它的SxS清单(LINK生成但我不得不通过mt手动应用)仅指版本CRT,而不是DebugCRT。任何想法如何解决?

1 个答案:

答案 0 :(得分:0)

当您使用使用Debug配置构建的obj和lib文件进行链接时,它应该引用DebugCRT。

您的命令行是什么样的?