从 nuget 包中获取动态文件夹
Get dynamic folder from nuget package
我们使用 rake 在我们的开发机器上构建和测试。我们最近将我们的一个项目移到了我们自己的本地 NuGet 服务器上。我们曾经将此项目用作子模块,因此它具有指向某些内容(许可证文件、用于部署的库等)的固定路径。我一直在研究 NuGet 包的创建方式,我认为我已经通过将内容作为 "content" 放在 NuGet 包中来弄清楚了。问题是 NuGet 只安装这些文件,我不会包括 NuGet 添加的东西。因此,当我向上推送我的代码并使用我们的构建服务器时,它失败了,因为所需的内容文件永远不会恢复。所以我的想法是将这些文件放入 /package/ourproject.2016.10.20.16
文件夹中。我看到的痛点是,如果有人更新项目中的 NuGet 包,他们也必须更新 rakefile。指向新的工具文件夹。值得庆幸的是,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 中更新该项目时都需要更改。 (我想这不是更糟糕的问题,这是唯一引用此包的项目。但如果有一种方法可以通过使用通配符或其他方式使其更具动态性,那就太棒了。有什么想法吗?
我想通了!其实很简单。我用了 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
我们使用 rake 在我们的开发机器上构建和测试。我们最近将我们的一个项目移到了我们自己的本地 NuGet 服务器上。我们曾经将此项目用作子模块,因此它具有指向某些内容(许可证文件、用于部署的库等)的固定路径。我一直在研究 NuGet 包的创建方式,我认为我已经通过将内容作为 "content" 放在 NuGet 包中来弄清楚了。问题是 NuGet 只安装这些文件,我不会包括 NuGet 添加的东西。因此,当我向上推送我的代码并使用我们的构建服务器时,它失败了,因为所需的内容文件永远不会恢复。所以我的想法是将这些文件放入 /package/ourproject.2016.10.20.16
文件夹中。我看到的痛点是,如果有人更新项目中的 NuGet 包,他们也必须更新 rakefile。指向新的工具文件夹。值得庆幸的是,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 中更新该项目时都需要更改。 (我想这不是更糟糕的问题,这是唯一引用此包的项目。但如果有一种方法可以通过使用通配符或其他方式使其更具动态性,那就太棒了。有什么想法吗?
我想通了!其实很简单。我用了 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