.net 调用C++;VS2008中csproj的链接

.net 调用C++;VS2008中csproj的链接,.net,visual-studio,msbuild,linker,csproj,.net,Visual Studio,Msbuild,Linker,Csproj,我感兴趣的是将单个.cpp文件(包含本机代码和托管代码)合并到一个更大的C#项目中。我不想为CPP代码使用单独的DLL,因为仅仅几行代码“浪费”整个DLL似乎很愚蠢,而且因为代码有一些安全功能,我更愿意通过将其隐藏在更大的程序集中来模糊一点。(在有人建议之前,我不能使用ILmerge或AL,因为它们不适用于本机代码。) 编译.cpp和.cs文件组的基本过程已经介绍了几次;主要的候选人建议似乎是: 然而,这两个(以及我能找到的所有相关链接)都只涉及在命令行上构建 我宁愿改变现有的.cPro

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

编译.cpp和.cs文件组的基本过程已经介绍了几次;主要的候选人建议似乎是:

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

<>我宁愿改变现有的.cProjfile来编译和链接C++代码(我不介意C++的构建本身在一个单独的.vcProjm中,虽然如果不是,但是必须在.cProjJ中连接),并且所有这些都可以在VS2008内建立,这样项目的用户就不需要知道差异。 不幸的是,我似乎无法从由VS编译的.csproj中成功调用link.exe。带有“link”的“Exec”元素找不到可执行文件,因为它不在路径中。显式指定位置($(DevEnvDir)…\VC\bin\link)确实会开始运行它,但立即失败,错误代码表明它无法加载所需的库(可能是因为它不在路径中)

是否有从VisualStudio中成功调用csproj链接的示例



编辑:好的,我现在已经设法解决了这个问题,一切都在编译、链接和运行良好——处于发布模式。它似乎在调试模式下运行正常,但出于某种原因,它的SxS清单(它是
LINK
生成的,但我必须通过
mt
手动应用)仅指发布CRT,而不是调试CRT。有没有办法解决这个问题?

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


您的命令行是什么样子的?

当您使用使用调试配置生成的obj和lib文件进行链接时,它应该引用DebugCRT


您的命令行是什么样子的?

是的,您必须使用set path=%path%设置路径;等等。更严重的障碍是IDE不允许您指定/module compile选项。您必须破解msbuild。我曾考虑过这样做,但无法找到正确的语法(在Exec元素内部或外部)。我不想为此创建批处理文件,这看起来很笨拙。我尝试的方法是重写CoreCompile目标;到目前为止,这似乎是可行的。这算是黑客攻击msbuild吗?(此处进行了编辑,因此上述讨论不再适用)是的,您必须使用set path=%path%设置路径;等等。更严重的障碍是IDE不允许您指定/module compile选项。您必须破解msbuild。我曾考虑过这样做,但无法找到正确的语法(在Exec元素内部或外部)。我不想为此创建批处理文件,这看起来很笨拙。我尝试的方法是重写CoreCompile目标;到目前为止,这似乎是可行的。这算是黑客攻击msbuild吗?(此处进行了编辑,因此上述讨论不再适用)