从 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