Каков наилучший способ запустить другое приложение .NetCore, использующее ту же среду выполнения, во время работы автономного приложения .NetCore? - PullRequest
1 голос
/ 03 августа 2020

У меня есть автономное приложение. net core на Ma c, и оно содержит другое приложение. net core в качестве плагина. Структура примерно такая:

MyApp.app
  |---Content
         |----MacOS
                |---self-contained runtime *dlls and assemblies
         |----Resources
                |---MyPlugin.app

После запуска MyApp пользователь может запустить MyPlugin. Я надеюсь поделиться временем выполнения под MacOS. Как лучше всего это сделать?

Вот то, что я пробовал, основываясь на том, что я прочитал и протестировал, все они могут быть неправильными ...:

  1. Поскольку MyPlugin использует apphost, похоже, работает один из способов - установить dotnet_ root на MyApp / Content / MacOS . Затем он будет искать что-то вроде $ DOTNET_ROOT / shared / $ name / $ version , но поскольку MyApp является самодостаточным, у него нет этой структуры, а это значит, что мне нужно будет создать эту структуру самостоятельно. .
  2. Я думаю, что nethost создан для приложений, отличных от .netcore, для запуска среды выполнения .netcore, даже если я использую это, я думаю, он столкнется с той же проблемой, что и первый способ.
  3. Поскольку Docker изолирует среду моего приложения, если я построю свое приложение с использованием образа. net core docker, возможно, и MyApp, и MyPlguin найдут правильные библиотеки .NetCore. Но я не могу предположить, что пользователи могут запускать Docker.

Есть ли более простой или официальный способ сделать это? Поскольку MyApp уже запущен, когда я запускаю MyPlugin, можно ли просто повторно использовать уже запущенную среду выполнения?

1 Ответ

0 голосов
/ 06 августа 2020

Кто-то задал аналогичный вопрос на github здесь , и член команды. net подтвердил, что в настоящее время это невозможно, и для обходного пути используется 1-й способ, описанный в вопросе.

Благодарим Витека Караса:

Вместо этого вы могли бы создавать приложения в зависимости от фреймворка. Затем при установке:

  • Получите "zip" загрузку для указанной c runtime version / target
  • Распакуйте его в какое-нибудь место - может быть в подпапке "runtime" вашего основная папка
  • Установите приложения, как показано выше (но на самом деле где угодно, это не имеет значения)
  • Запускайте приложения с помощью «скрипта» - все, что вам нужно сделать, это установить DOTNET_ROOT = path окр. переменная>, чтобы указать на папку среды выполнения, а затем запустить приложение из этой среды. На Windows вы также можете установить DOTNET_MULTILEVEL_LOOKUP = 0, чтобы убедиться, что приложения не будут использовать глобально установленный. NET Ядро (если есть).
...