.net本机如何扩展用于node.js?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

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

更正做到这一点的文章正义:它建议更改选项设置为“无公共语言运行库支持” 只为文件SharpAddon.cpp添加将CLR支持启用(对于CLR项目的默认值),那么其他的.cpp-文件,这意味着实际上可以使用来自其他.cpp文件的.net dll。

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

提问于
用户回答回答于

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

事实证明,这很容易。在与CLR托管挣扎并在主机中获取数据一段时间后,事实证明,实际上为节点扩展启用/ clr没有问题(到目前为止)。就是这样:

  • 请按照http://nodejs.org/api/addons.html上的说明生成项目文件
  • 在Visual Studio中打开生成的.sln(我在VS 2010中)并在项目设置中启用/ clr
  • 现在它可能不会生成,并且您必须让 - 在这种情况下实际上非常有用 - 错误消息指导您与/ clr冲突的标志

我不得不改变的标志使它工作:

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

然后你可以像这样混合管理和非托管代码,引用你的.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扩展

扫码关注云+社区