在一个程序集中从本机调用 C#

Calling C# from native within one assembly

我遇到了以下问题:

我有本机 C 代码 .api 需要通过一些函数定义对其进行扩展以使其适应我们的功能。我可以用 C 代码对其进行调整,在 VS 解决方案中编译它,有效!

现在我想从上面提到的 C 代码调用 C# 代码。我这样做了:

[带扩展的原生 C] --> [托管 C++] --> [C#]

这也行。

问题:如何减少程序集的数量?

我目前发现的:

原因: 出于安全原因,我们希望加密尽可能多的部分。因此最好是一个 .exe.

遗憾的是,您无法将本机程序集与 CLR 程序集打包在一起。但是,您可以:

  • 使用 ILMerge 将所有纯 CLR 程序集合并为一个程序集;
  • 将所有本机程序集(C、C++ 和托管 C++)静态地link 到单个 DLL 中。

因此您只有两个文件,一个是本机代码,一个是纯托管代码。您或许可以使用嵌入式资源将本机程序集嵌入托管程序集(参见 this msdn article or this Whosebug question)。