2015-04-02 2 views
22

Я уже интенсивно искал решение, пробовал разные подходы, но никто не работал, поэтому я спрашиваю здесь.NuGet и Git Submodules

Моя текущая потребность состоит в том, чтобы иметь отдельные хранилища Git, каждый из которых содержит файл решения .Net с соответствующими проектами. Один или несколько из этих репозиториев будут содержать только библиотеки классов, и мне нужно использовать эти библиотеки в других репозиториях.

Моим первым было использовать Git Submodules, чтобы избежать уродливой копии-пасты и по-прежнему иметь исходный код библиотек классов, доступных при разработке приложений.

Итак, моя попытка состояла в том, чтобы включить подмодуль, а затем в моем текущем решении «добавить существующий проект» и загрузить нужную библиотеку классов (ов).

Огромная проблема, которую я не смог преодолеть, - это восстановление пакета Nuget. Импортируемые проекты справочных библиотек в «.. \ пакеты *», но при импорте, как подмодуль они находятся в дополнительной подпапке поэтому они не могут найти необходимые зависимости:

- MySolution.sln 
- Packages folder 
- MyAppProject folder 
- Submodule folder 
-- EXPECTED packages folder for MyLibraryProject that I cannot generate 
-- MyLibraryProject folder 

Одно решение, которое я нашел и попробовал было this но у него есть две основные проблемы:

  • он должен работать, используя MSBuild пакет восстановления, и я абсолютно не хочу, чтобы использовать его
  • Даже пытаются использовать пакет MsBuild восстановить его не будет работать вообще, я все еще есть папка Пакеты в моей текущей папке решения. Возможно, я сделал что-то неправильно, но опять же, я не хочу использовать подход MsBuild.

Теперь я хотел бы знать, есть ли чистый способ решить эту проблему, или если я могу сделать только то, чтобы отказаться от наличия исходного кода библиотек в своих приложениях и опубликовать мои библиотеки на частный канал NuGet и ссылаться на них оттуда.

Спасибо.

+1

Вы рассматривали использование NuGet для MyLibraryProject вместо git-подмодулей? Запустите локальный сервер NuGet, создайте пакет NuGet для библиотеки и добавьте ссылку на это в своем приложении. Просто вариант ... –

+0

Спасибо за ваше предложение. Я действительно рассматривал этот вариант, но мы думаем использовать онлайн-службу CI, такую ​​как AppHarbor, и это заставит нас использовать общедоступную (оплаченную) службу nuget, а также MyGet, чтобы иметь возможность восстанавливать пакеты из CI-сервера, и мы хотели бы избежать этого. –

+0

Хорошо. И вы должны иметь два уровня каталогов для проекта библиотеки? (Может ли каталог подмодулей быть самим каталогом проекта библиотеки?) –

ответ

5

Похоже, ваша проблема в том, что проекты из подмодуля находятся на другом уровне каталога, чем их решение репо. Это обычная проблема с Nuget, потому что она восстанавливается на уровне решения. Здесь вы можете использовать скрипт пути подсказки исправления, чтобы заменить ваши ссылки на $ (SolutionDir) и, вероятно, решить проблему. https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/README.md#fixhintpathsps1

+0

Я вижу, что есть чистый сценарий powershell, который фиксирует hintpaths, чтобы я мог писать сценарий. Я буду оценивать это возможное решение, спасибо. –

+0

Разве это в конечном итоге работает на вас? – mshish

+0

Хотя это действительно жизнеспособно, мы все еще находимся в процессе принятия решений, хотя похоже, что мы будем использовать Nuget для внутренних зависимостей вместо подмодулей git, как предлагал @ jon-skeet. –

 Смежные вопросы

  • Нет связанных вопросов^_^