Получение динамической папки из пакета nuget

#visual-studio #nuget #rake #rake-task #build-server

#visual-studio #nuget #rake #rake-задача #сборка-сервер

Вопрос:

Мы используем rake для сборки и тестирования на наших компьютерах разработчиков. Недавно мы перенесли один из наших проектов на наш собственный локальный сервер NuGet. Раньше мы использовали этот проект как подмодуль, и, таким образом, у него был постоянный путь к некоторому контенту (файлы лицензий, библиотеки для развертывания и т.д.). Я поиграл с тем, как создается пакет NuGet, и подумал, что разобрался с этим, поместив это содержимое как «content» в пакет NuGet. Проблема в том, что NuGet помещает только эти файлы при установке, и я не буду включать то, что добавляется NuGet. Итак, когда я запускаю свой код и использую наш сервер сборки, происходит сбой, потому что требуемые файлы содержимого никогда не восстанавливаются. Итак, я подумал поместить эти файлы в /package/ourproject.2016.10.20.16 папку. Проблема, которую я вижу, заключается в том, что если кто-то обновит пакет NuGet в проекте, ему также придется обновить файл rakefile. Чтобы указать на новую папку tools. К счастью, NuGet автоматически присваивает проекту имя пакета и номер версии, так что это соответствует в этом отношении. В качестве версии мы используем дату сборки и номер сборки yyyy.mm.dd.bb .

это та часть файла rake, которая представляет интерес

 task :copy_to_deployment_folder do
    copy_hash = {
        "." => ["#{solutionName}.Deployment/Scripts/DevDeploy.bat",
                "#{solutionName}.Deployment/Scripts/QaDeploy.bat",
                "#{solutionName}.Deployment/Scripts/PreProdDeploy.bat",
                "#{solutionName}.Deployment/Scripts/ProdDeploy.bat",
                 ],
        "Applications/#{solutionName}" => "#{solutionName}/bin/{configuration}",
        "deploy" => ["#{solutionName}.Deployment/deploy_bin",
                       "#{solutionName}.Deployment/bin/{configuration}"],
        "deploy/settings" => "#{solutionName}.Deployment/settings",
        "deploy/Licenses" => "packages/ourproject.2016.10.20.20/tools/Licenses"
    }

    BuildController.copy_to_deployment_folder copy_hash
end
  

в частности, последний элемент в copy_hash должен был бы меняться каждый раз, когда этот проект обновлялся в NuGet. (Я полагаю, это не самая серьезная проблема, и это единственный проект, который ссылается на этот пакет. но если бы был способ сделать ее более динамичной, используя подстановочные знаки или что-то еще, это было бы потрясающе. Есть идеи?

Ответ №1:

Я понял это! на самом деле это было довольно просто. Я использовал Dir.glob (извините, если это нехорошо, но я не сторонник Ruby.

 task :copy_to_deployment_folder do
    packagePath = Dir.glob("packages/ourproject.*")[0]
    copy_hash = {
        "." => ["#{packagePath}/content/Scripts/DevDeploy.bat",
                "#{packagePath}/content/Scripts/QaDeploy.bat",
                "#{packagePath}/content/Scripts/PreProdDeploy.bat",
                "#{packagePath}/content/Scripts/ProdDeploy.bat",
                 ],
        "Applications/#{solutionName}" => "#{solutionName}/bin/{configuration}",
        "deploy" => ["#{packagePath}/content/deploy_bin",
                       "#{solutionName}.Deployment/bin/{configuration}"],
        "deploy/settings" => "#{solutionName}.Deployment/settings",
        "deploy/Licenses" => "#{packagePath}/content/Licenses"
    }

    BuildController.copy_to_deployment_folder copy_hash
end
  

Комментарии:

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