.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, или просто запустить из этого каталога (сделать его текущим каталогом).