.net本地扩展为node.js

我想在node.js中使用.net dll。 这是否意味着我需要使用c / c ++使用'clr hosting',la

  • .NET Framework 4托pipe接口或
  • 承载公共语言运行时

不幸的是,在github上创build一个nodejs原生.Net扩展的例子有点令人失望,只是向下滚动到最后一步

将“通用语言运行时支持”选项更改为无公共语言运行时支持

你知道我的意思 更正这篇文章正义:它build议将该选项更改为“No Common Language RunTime Support” 仅用于SharpAddon.cpp文件 ,因此您添加的其他.cpp文件将启用CLR支持(默认为CLR项目) ,这意味着你可以使用其他.cpp文件中的.net dll。

这个问题实际上是在Node.js / serverside javascript中使用.NET DLL的一个副本,当时甚至没有一个本地的Windows端口节点,所以时间可能已经改变,尽pipe谷歌让我怀疑它。

更新 :当binding.gyp文件设置正确时,node-gyp可以自动执行下面的手动步骤。 看到这个简单的程序的答案 。


原来相当简单。 经过CLR托pipe和数据进出主机一段时间后,事实certificate, 你可以实际上启用/ clr你的节点扩展没有问题 (到目前为止)。 就是这样:

我不得不改变标志,使其工作:

  • 禁用/ EHsc(C ++exception)
  • 禁用/ RTC1和/ RTCsu
  • 发布:将/ MT更改为/ MD
  • debugging:将/ MTd更改为/ MDd
  • 发布:更改/ GR-到/ GR

然后你可以像这样混合pipe理和非托pipe的代码,引用你的.net dll。

 #pragma managed #using <managed.dll> void callManaged() { managed::Class1^ c1 = gcnew managed::Class1(); System::String^ result = c1->Echo("hola"); System::Console::WriteLine("It works: " + result); } #pragma unmanaged Handle<Value> Method(const Arguments& args) { HandleScope scope; callManaged(); return scope.Close(String::New("world")); } 

更新刚刚发现这个链接与一个简单的howto: http : //joseoncode.com/2012/04/10/writing-your-first-native-module-for-node-dot-js-on-windows/

听起来像edge.js是iisnode作者的新答案:

Edge.js支持使用C#和.NET,而不是编写本地node.js扩展