Каково ожидаемое поведение родительских каталогов в global.json?

(Теперь поднимается как выпуск DNX 3206...)

Среда DNX: 1.0.0-rc1, Windows 10 x64.

Представьте, что у меня есть три решения:

  • Приложение1
  • Приложение2
  • Общий

Каждое из этих решений имеет несколько проектов; не имеет смысла объединять все проекты в одном решении, даже если это упростит эту конкретную проблему.

Различные проекты в Application1 и Application2 зависят от проекта в Common. Их файлы project.json указывают на эту зависимость обычным образом. Хотя в конечном итоге я хотел бы опубликовать артефакты из Common на сервере NuGet (внутреннем или внешнем), имеет смысл временно просто собрать все из исходного кода.

Я могу сделать это, отредактировав global.json внутри (скажем) Application1, чтобы иметь:

{
  "projects": [ "src", "test", "../Common/src" ], 
  "sdk": { "version": "1.0.0-rc1-final"  }
}

Имея это на месте, я могу выполнить dnu restore из каталога Application1... но не из корневого каталога. (Ошибка: «Невозможно найти общую зависимость >= 0.0.0-*».) Я могу запустить dnu restore Application1 из корневого каталога, но не только dnu restore.

Я пробовал множество способов обратиться к каталогу Common src (включая «./Common/src», «Common/src», «../repo-name/Common/src»), но не получил никакой радости. пока что. В каждом случае я получаю сообщение об ошибке, показанное выше. Я пытался использовать dnu -v restore, но это, похоже, не давало никакой дополнительной информации о том, какие каталоги проверялись на наличие пакетов на основе исходного кода.

Итак, как следует разрешить "../Common/src" в global.json? Является ли это разумным подходом к описанному мной сценарию разработки, и если да, то нужно ли просто зарегистрировать ошибку в DNX?


person Jon Skeet    schedule 25.11.2015    source источник
comment
Я все еще учусь, но разве у вас не должен быть только один файл global.json, и он должен быть в корне?   -  person Khalid Abuhakmeh    schedule 25.11.2015
comment
@KhalidAbuhakmeh: по одному на решение. Это случай нескольких решений, каждое из которых имеет несколько проектов. Уточню вопрос.   -  person Jon Skeet    schedule 25.11.2015
comment
Нет опыта работы с global.json (или dnx); но в целом я стараюсь избегать относительных ссылок, таких как ../folder, потому что они проблематичны в разных контекстах. Вы пытались сохранить содержимое Common/src в папке данного приложения и ссылаться на него без части ../? Просто для тестирования. Чтобы узнать, не в этом ли проблема.   -  person varocarbas    schedule 25.11.2015
comment
@varocarbas: я уверен, что это было бы хорошо, но бесполезно для целей организации файлов. Я только ожидаю, что макет в файловой системе будет соответствовать макету в репо — здесь нет никаких ожиданий между репо.   -  person Jon Skeet    schedule 25.11.2015
comment
Это было предложение для простых целей тестирования (чтобы удалить потенциальные источники ошибок, не говоря о том, что файлы не могут находиться где-либо, просто, возможно, способ, которым вы использовали путь, не поддерживается). Например, PHP require/include не поддерживает этот формат. В любом случае... Я уверен, что вы знаете обо всем этом гораздо больше меня. Просто пытаюсь помочь.   -  person varocarbas    schedule 25.11.2015
comment
@ jon-skeet, твои ожидания кажутся мне разумными. Я бы зарегистрировал ошибку. :-)   -  person Kevin LaBranche    schedule 25.11.2015
comment
Хм, я думаю, вы могли бы обойти это, создав символическую ссылку в файловой системе. Учитывая, что вы сказали, что это временно, это не должно быть слишком большим вопросом.   -  person laurencee    schedule 25.11.2015
comment
@Michael: Вероятно, так и было бы, но я ни за что не собираюсь опускаться так низко :) (Это действительно должно работать, где бы вы ни находились, чтобы проверить репо, и в любой операционной системе.)   -  person Jon Skeet    schedule 25.11.2015
comment
@JonSkeet Я предполагаю, что комментарий предназначался для меня;) Поднимите его на дополнительный уровень зла, предварительно создав задачу для создания символической ссылки, если она не существует.   -  person laurencee    schedule 26.11.2015
comment
@Laurencee: Не уверен. Возможно, это было направлено на ныне удаленный комментарий...   -  person Jon Skeet    schedule 26.11.2015


Ответы (1)


Это не работает так, как вы ожидаете, когда вы запускаете dnu restore, он пытается найти global.json в текущем или родительском каталогах и считывает из него путь к проекту. Итак, в вашем примере он ничего не читает, потому что global.json находится в подкаталоге.

Один из способов решить эту проблему — добавить global.json в корневую папку со следующим содержимым:

{
   "projects": [ "Application/src", "Common/src" ]
}

Я поспрашиваю об этом сценарии, и может ли он измениться при переходе на dotnet cli

person Pavel Krymets    schedule 25.11.2015
comment
Значит, он только ищет project.json при поиске в дочерних каталогах? Это имело бы смысл в поведении, но казалось бы странным выбором дизайна. Но поэкспериментирую - спасибо! - person Jon Skeet; 26.11.2015
comment
Да, поиграв еще немного, я думаю, что проблема именно в этом. Изменю тему соответствующим образом :) - person Jon Skeet; 27.11.2015