Tag: linker

如何将C#和C ++程序集链接到单个可执行文件中?

我有VS2008解决方案包含一个项目,该项目生成一个C#可执行文件,该项目引用了一个生成包含C ++ / CLI和非托管C ++的DLL的项目。 我想将这些合并到一个可执行文件中,因为C ++ dll包含我想要嵌入主可执行文件的安全代码。 我不能使用ILMerge,因为dll包含托管代码和非托管代码。 建议的解决方案似乎是使用link.exe将C#程序集与C ++目标文件链接起来。 这就是我想要做的。 我手动编辑了c#可执行文件的项目文件以生成netmodule。 我在可执行项目中添加了一个构建后步骤,以运行link.exe将c#netmodule和已编译的C ++目标文件链接在一起,然后运行mt.exe来合并两个项目创建的程序集清单。 这运行成功,但是exe仍然包含对C ++项目的正常构建过程生成的dll中定义的c ++类型的引用和使用。 然后我在C ++ dll的项目设置中指定了/ NOASSEMBLY,因此它还生成了一个netmodule。 在C#项目中,我删除了对C ++项目的引用,但在解决方案中添加了项目依赖项。 我手动编辑了C#项目文件,包含类似于: 即引用现在由C ++项目生成的C ++ netmodule。 但是,现在我的post build事件中的链接器步骤失败了: error LNK2027: unresolved module reference ‘librarycode.netmodule’ fatal error LNK1311: 1 unresolved module references: 这完全可以理解,因为我没有链接到librarycode netmodule; 我正在链接用于生成netmodule的C ++目标文件。 简而言之,如何将ac#executable和C ++目标文件合并到一个程序集中? 我错过了什么? 到目前为止,我的引用源(来自MSDN上的link.exe命令链接引用等)是以下两篇文章: http://blogs.msdn.com/texblog/archive/2007/04/05/linking-native-c-into-c-applications.aspx http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx我有一个演示解决方案,显示我的工作到目前为止,如果这有帮助。 非常感谢你提前。 […]