.NET Core в Ubuntu - какое правильное значение для переменной env CORECLR_DIR?

На моем хосте Ubuntu 14 я пытаюсь использовать модуль Node с именем node-msmq, который обеспечивает мост к MS MSMQ. Этот модуль зависит от наличия установленной среды.NET. У меня есть компиляция.NET в Ubuntu с использованием git repo, и он находится в /home/ubuntu/coreclr:

ubuntu@lin-dev-42:~/coreclr$ pwd
/home/ubuntu/coreclr

ubuntu@lin-dev-42:~/coreclr$ ls
all.locproj            clrdefinitions.cmake   crossgen.cmake                     generateversionscript.awk   README.md
bin                    clr.desktop.props      dac.cmake                          global.json                 run.cmd
build.cmd              clr.native.targets     dac.props                          init-tools.cmd              run-cppcheck.sh
build-packages.cmd     clr.props              definitionsconsistencycheck.cmake  init-tools.sh               run.sh
build-packages.sh      clr.targets            dir.props                          LICENSE.TXT                 sanitizerblacklist.txt
build.proj             cmake.definitions      dirs.proj                          netci.groovy                src
build.sh               CMakeLists.txt         dir.targets                        oacr.cfg                    sync.cmd
build-test.cmd         CODE_OWNERS.TXT        dir.traversal.targets              packages                    sync.sh
BuildToolsVersion.txt  compileoptions.cmake   Documentation                      partition.settings.targets  tests
clean.cmd              config.json            DotnetCLIVersion.txt               PATENTS.TXT                 THIRD-PARTY-NOTICES
clean.sh               CONTRIBUTING.md        enablesanitizers.sh                perf.groovy                 Tools
clr.coreclr.props      cross                  functions.cmake                    publish-packages.cmd        UpdateDependencies.ps1
clr.defines.targets    crosscomponents.cmake  generateexportedsymbols.awk        publish-packages.sh         UpdatePublishedVersions.ps1

Мой скрипт Node выглядит очень просто:

const msmq = require('node-msmq');

//var queue = msmq.openOrCreateQueue('.\\Private$\\MyAwesomeQueue');

// Send message to queue 
//queue.send('Hello from Node.JS!');

Когда я запускаю этот код, я получаю ошибку, жалуясь на неправильную настройку env var CORECLR_DIR:

ubuntu@lin-dev-42:~/dev/node/msmq-producer$ node producer.js 

module.js:355
  Module._extensions[extension](this, filename);
                               ^
Error: Unable to load the CLR from the directory (��S) specified in the CORECLR_DIR environment variable.
    at Error (native)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/home/ubuntu/dev/node/msmq-producer/node_modules/node-msmq/node_modules/edge/lib/edge.js:53:8)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)

В настоящее время я установил эту переменную в:

ubuntu@lin-dev-42:~/dev/node/msmq-producer$ echo $CORECLR_DIR
/home/ubuntu/coreclr

что, по-видимому, является неправильной ценностью.

Какое значение мне следует установить, чтобы обнаружить мою среду coercer .NET в Ubuntu?

1 ответ

Эта ошибка не исходит от самого CoreCLR.

Исходя из вашего стека, похоже, что вы используете edge.js, Я только что посмотрел на GitHub README для края, и он говорит следующее об этой переменной среды (я рекомендую прочитать весь README):

Edge попытается найти среду выполнения.NET Core в следующих местах:

  • Путь в CORECLR_DIR переменная окружения, если имеется
  • Текущий каталог
  • Каталог, содержащий edge_*.node
  • Каталоги в PATH переменная окружения. Однажды каталог, содержащий dotnet находится исполняемый файл, затем мы делаем следующее, чтобы решить, какую версию фреймворка (можно установить сразу несколько) загрузить
    • Если CORECLR_VERSION указана переменная окружения, мы пытаемся загрузить эту версию
    • Иначе, если в project.json/*. Deps.json есть ссылка на Microsoft.NETCore.Appуказывая на то, что он был создан для конкретной версии фреймворка, мы пытаемся загрузить эту версию
    • В противном случае мы выбираем максимально установленную версию

Поэтому самый простой ответ на ваш вопрос - установить эту переменную в каталог, содержащий libcoreclr.so, или просто запустить из этого каталога (сделать его текущим каталогом).

Другие вопросы по тегам