"指定的模块无法找到." 使用本机插件将项目复制到服务器计算机时

Eug*_*sky 4 64-bit windows-server-2008-r2 node.js

我为节点创建了一个本机插件,一个64位dll,使用该/clr标志编译以访问另一个.net dll.

一切都可以在我的开发盒(Windows 7,64bit)上很好地工作,但是当将整个目录复制到服务器盒(Windows Server 2008 R2,64位,.net 4.0 Client Profile&Extended installed)时,

var myaddon = require('./build/Release/myaddon');
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

module.js:485
  process.dlopen(filename, module.exports);
          ^
Error: The specified module could not be found.
C:\Users\x\build\Release\myaddon.node
    at Object.Module._extensions..node (module.js:485:11)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
Run Code Online (Sandbox Code Playgroud)

我知道它成功找到文件'myaddon.node',因为当我稍微更改require语句指向一个不存在的文件时,它会抱怨一个不同的错误消息.

没有我的require语句,节点启动正常.

为什么错误以及如何解决?

Eug*_*sky 7

从头开始插件用于调试目的而没有/clr- 哪个工作正常 - 我想通了.

  • 设置'/ clr'标志会强制您将'/ MT'(运行时库的静态链接)更改为'/ MD'(rt libs的动态链接)
  • 动态链接意味着需要在目标机器上安装C++ dll

在我的情况下,这意味着在服务器上安装Microsoft Visual C++ 2010 SP1可再发行组件包(x64).