Команда Multiperson, использующая NuGet и Source Control
Am в команде из двух человек, использующей Team Foundation Server для нашего исходного контроля. Я начал новое решение. Для этого решения я создал несколько проектов. Во многих из них я использовал NuGet для установки AutoMapper и Unity. Затем я щелкнул правой кнопкой мыши по решению и выбрал "Добавить в исходное управление". Затем я проверил полученные ожидающие изменения.
Другой человек в моей команде сделал последнее, и все ссылки NuGet терпят неудачу для него.
Итак, я решил, что мне нужно добавить Пакет Пакетов. Поэтому я сделал это.
После этого ссылки NuGet все еще терпят неудачу (для него).
Кроме того, когда я пытаюсь добавить пакет NuGet в файл, я получаю эту ошибку:
Доступ к пути 'C:\src\MyPath\ToMySolution\packages\repositories.config' отклоняется.
Я предполагаю, что это происходит из-за того, что файл repositories.config теперь находится под контролем источника (поэтому он считывается только до тех пор, пока не будет извлечен вручную).
Итак, вот мои два вопроса:
- Как или что я могу проверить, чтобы пакеты NuGet были действительны для моего сотрудника, когда он получает последнюю версию?
- Есть ли способ не вручную проверять файлы NuGet, когда мне нужно использовать NuGet?
Я делаю это неправильно? или NuGet не предназначен для использования с Source Control?
Ответы
Ответ 1
Редактировать 2014/03/31: Руководство по восстановлению пакета на базе MSBuild больше не требуется, см. также http://xavierdecoster.com/migrate-away-from-msbuild-based-nuget-package-restore.
Изменить 2012/02/07: теперь это встроенная функция NuGet vsix, называемая Enable Package Restore.
Устаревшая альтернатива
Для этого есть пакет NuGet, он называется NuGetPowerTools. Он добавляет две новые команды в консоль диспетчера пакетов NuGet в Visual Studio, среди которых для вас интересна Enable-PackageRestore.
Он добавит папку .nuget, содержащую nuget.exe, nuget.settings.targets и nuget.targets.
При запуске разрешить восстановление пакета он перечислит все проекты в вашем решении и добавит в файл проекта файл import nuget.targets(которые сами являются файлами msbuild).
Всякий раз, когда вы создаете проект или все решение, nuget будет извлекать все пакеты для этого проекта/решения, как определено в файле packages.config. Это происходит на этапе предварительной сборки.
Итак, короче:
- не регистрировать пакеты
- выполните проверку файлов конфигурации (файлы repositories.config и packages.config)
- использовать Включить восстановление пакетов
- зарегистрировать папку .nuget
Всякий раз, когда кто-то получает источники, будь то другой разработчик в команде или агенте сборки, процесс msbuild будет проинструктирован об извлечении любых необходимых пакетов на этапе предварительной сборки.
Кроме того, когда пакеты не передаются в TFS Source Control, вы не будете удалять ошибки только для чтения или слить конфликты с двоичными файлами.
Если вы хотите, вы также можете проверить основы для этого подхода в моем блоге.
Ответ 2
Не проверяйте папку пакетов.
Добавьте в проект следующее событие предварительной сборки:
$(SolutionDir)build\nuget install $(ProjectDir)packages.config -source \\server\path\NuGetPackages -o $(SolutionDir)packages
Параметр Omit -source, если не использует пользовательские пакеты.
nuget.exe проверяется на $(SolutionDir) build\nuget
Ответ 3
Я всегда проверяю только папку packages.config и использую команду rake, которую разработчик (и сервер сборки) может использовать для локального обновления пакетов.
Задача выглядит так:
def nuget_for_project(project_dir)
sh "tools\\NuGet.exe " +
"i Source\\#{project_dir}\\packages.config " +
"-o Source\\Packages"
end
namespace :nuget do
desc "nuget for servicebus"
task "ServiceBus" do
nuget_for_project "SampleProject.ServiceBus"
end
desc "nuget for web"
task "Web" do
nuget_for_project "SampleProject.Web"
end
desc "nuget for all"
task "all" => ["nuget:ServiceBus", "nuget:Web"]
end
Обратите внимание, что приведенный выше script использует локальную версию NuGet.exe, которая находится в папке с инструментами, проверенной в исходном элементе управления.
Вы можете написать это для msbuild или nant вместо.
Я написал более длинное сообщение в блоге об этом некоторое время назад, что может быть полезно.
Ответ 4
У меня тоже есть эта проблема. Мне нравится идея восстановления Nuget, но я не чувствую, что мне это нужно. Я хочу, чтобы мои разработчики JR могли проверять решение и иметь все, что им нужно.
Итак, я поместил папку своих пакетов в исходный код.
Мое решение включить Nuget в этом случае состояло в том, чтобы обратить внимание на это сверху:
"Я предполагаю, что это связано с тем, что файл repositories.config теперь находится под контролем источника (поэтому он читается только до тех пор, пока не будет вручную извлечен).
Я открыл файл repositories.config и добавил пустую строку. Затем добавили пакеты Nuget, которые мне нужны. Проблема решена.
Ответ 5
Должен дать крик в этой статье:
http://www.jsinh.in/2013/11/enable-nuget-package-restore/
В нем точно описывается, что делать и почему.
Для некоторых систем может потребоваться представление версий нескольких пакетов, чтобы поддерживать согласованность сборки, однако, если файл package.config контролируется версией и пакет можно загрузить, то сборка может выполняться в любое время без версии фактическое содержимое пакета. Внимание: строитель пакета, может без вашего ведома, добавлять элементы к старой сборке.
Редко, но возможно.
Например, пакет "abc.package" версии 2.0.2 встроен в ваш проект. Вы не используете версию abc.package, но делаете версию package.config. Несколько месяцев спустя вам нужно добавить исправление ошибок в сборку, которую вы сделали несколько месяцев назад. Вы получаете предметы из VC. VisualStudio загружает версию 2.0.2 "abc.package", но с момента последней сборки разработчик пакета вставил или исправил некоторый код. Этот новый код может вести себя по-другому в вашем приложении.
Итак, для VC есть веские причины!
Ответ 6
На всякий случай это помогает любому, мое решение для этого было очень простым:
- Открытый целевой файл в NP ++
- В меню редактирования, полностью в нижней части, нажмите
Clear Read-Only Flag
- Сохранить файл
- Profit
Это работает для меня с решением, которое на момент написания этой статьи 39 проектов.