我有兴趣将单个 .cpp 文件(包含本机代码和托管代码)合并到一个更大的 C# 项目中。我不想为 CPP 代码使用单独的 DLL,因为仅仅为几行代码“浪费”整个 DLL 似乎很愚蠢,而且因为代码具有一些我更愿意混淆的安全功能将其隐藏在更大的程序集中。(在有人建议之前,我不能使用 ILmerge 或 AL,因为它们不适用于本机代码。)
编译 .cpp 和一组 .cs 文件的基本过程已经介绍过几次;主要候选人的建议似乎是:
- http://blogs.msdn.com/b/junfeng/archive/2006/05/20/599434.aspx
- http://blogs.msdn.com/b/texblog/archive/2007/04/05/linking-native-c-into-c-applications.aspx
然而,这两个(以及我能找到的所有相关链接)都只处理在命令行上构建。
我更愿意更改我现有的 .csproj 文件以在 C++ 代码中编译和链接(我不介意 C++ 构建本身位于单独的 .vcproj 中,虽然如果不是更好,但链接必须在 .csproj 中),并使其都可以在 VS2008 中构建,这样项目的用户就不需要知道其中的区别。
不幸的是,我似乎无法从 VS 编译的 .csproj 中成功调用 link.exe。带有“link”的“Exec”元素找不到可执行文件,因为它不在 PATH 中。显式指定位置 ("$(DevEnvDir)....\VC\bin\link") 确实开始运行它,但它立即失败并显示错误代码,表明它无法加载它需要的库(大概是因为再次,它不在PATH中)。
是否有任何从 Visual Studio 中的 csproj 成功调用 LINK 的示例?
编辑:好的,我现在已经设法解决了这个问题,一切都在编译、链接和运行良好——在发布模式下。它似乎在调试模式下仍然可以正常运行,但由于某种原因,它的 SxS 清单(LINK
生成但我必须通过手动应用mt
)仅指发布 CRT,而不是 DebugCRT。任何想法如何解决这个问题?