【问题标题】:Automate nuget update-package operation on many VS solutions在许多 VS 解决方案上自动执行 nuget 更新包操作
【发布时间】:2016-07-02 07:06:23
【问题描述】:

我有 10 多个引用 nuget 包的 Visual Studio 解决方案。 当我决定在每个解决方案中更新该包时,手动打开每个解决方案、更新其包并将所有更改签入 TFS 是一项很长的工作。我想通过一个代表我的批处理操作来“自动化”这个过程。

我已经通过命令行对 nuget.exe 进行了一些实验,但它并不关心 TFS 只读文件:它会覆盖我的文件内容而不签出它们,因此这种方式似乎不是最好的方法去做吧。

还有什么其他的建议可以实现这个目标吗?

【问题讨论】:

    标签: visual-studio tfs nuget nuget-package


    【解决方案1】:

    下载Nuget Comanline

    nuget.exe restore YourSolution.sln 
    nuget.exe update YourSolution.sln 
    

    Nuget Docs

    【讨论】:

    • “但它不关心 TFS 只读文件:它会覆盖我的文件内容而不签出它们”
    【解决方案2】:

    您可以使用 nuget update 命令来执行此操作。即使您在 VS 之外运行命令,VS/TFS 也可以检测到更改。通常,nuget 包更新期间只会更新“packages.config”文件。

    更新: 以下是一个简单的代码,用于在给定路径下查找解决方案文件并更新解决方案的 nuget 包,然后通过 TFS PowerShell CommandLets 签入待处理的更改(您需要安装“TFS Power Tool”才能使用此命令行开关)。您可以根据自己的情况进行更新。

    param([String]$dirpath)
    
    add-pssnapin Microsoft.TeamFoundation.PowerShell;
    
    Get-ChildItem -Path $dirpath -Filter *.sln -Recurse | ForEach-Object { & nuget update $_.FullName 2>1;  cd $_.Directory; get-tfspendingchange; new-tfschangeset}
    

    将代码保存为 powershell 脚本,并使用参数“-dirpath yoursolutionpath”从 Windows PowerShell 运行它。它将按以下方式运行:

    【讨论】:

    • 对不起,但在我的描述中没有提到签入 nuget 包,因为我不这样做。我写道,我在 TFS 下有 10 多个使用某个包的解决方案,但这并不意味着每个解决方案都将其包置于源代码控制之下。我的目的是通过命令行/powershell/don't know 更新特定的包,并使 Visual Studio 和 TFS 能够看到更改的文件(例如 csproj 文件、packages.config 文件等),以便我可以在 TFS 下签入。
    • @Luca 哎呀,抱歉误解了你的问题,我已经更新了我的答案。
    • 我应该在哪里使用更新命令?从powershell?可以发一个小例子吗?
    • 感谢您的回答,我想我们已经非常接近解决方案了。运行脚本时遇到问题,因为它说 nuget 未被识别为 cmdlet 的名称。我应该以任何方式导入它吗?
    • @Luca 您需要将nuget.exe下载到您的机器上并将其路径设置为环境路径。
    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多