首页 文章

如何自动将NuGet包更新到最新的可用版本

提问于
浏览
37

我有两个存储库,我需要从另一个存储库中编译库 . 我不想手动检查repo1的更新库,并复制/提交到repo2,因为这是愚蠢的 . 我已经在每个必要库的构建上创建了repo1构建NuGet包,并将它们发布到内部NuGet服务器 . 然后repo2中的项目可以引用这些NuGet包,一切都(几乎)正常工作 .

最后一个障碍是自动更新repo2项目中的NuGet包 . 由于我不知道repo1中的库何时会更新(我不应该),我想在repo2中的项目上进行某种构建事件,它将自动更新NuGet包 . 我目前只有一个预构建事件,但由于packages.config文件包含已安装软件包的版本号,我不断在repo2中获取修改过的文件(packages.config文件得到更新) .

所以我的问题是:什么是自动升级NuGet包而不破坏我的repo2 VCS的好方法? ScottGu说Here(在评论中)它指出了我当前的解决方案是如何凌乱的 . 有没有我错过的内置方式?或者更好的解决方案?

3 回答

  • -1

    您可以修改.cspoj文件以执行“BeforeBuild”目标,如下所示:

    <Target Name="BeforeBuild">
      <Exec Command="&quot;$(SolutionDir).nuget\NuGet&quot; update &quot;$(ProjectDir)packages.config&quot; -Id your.package.id" />
    </Target>
    

    请注意:您需要在ur解决方案目录中拥有“Nuget.exe”

  • 3

    你可以利用NuGet包恢复功能(这里有一些信息:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

    在项目构建时,它调用“nuget.exe -install”从packages.config重新安装软件包 . 我没有尝试过,但您可以以相同的方式向nuget.targets文件添加更新命令 . (您必须同时调用nuget.exe更新和现有的nuget.exe安装) .

  • 0

    这解释了如何通过MSBuild完成它

    http://netitude.bc3tech.net/2014/11/28/auto-update-your-nuget-packages-at-build-time/

    <Target Name="UpdatePackages" DependsOnTargets="CheckPrerequisites">
       <Exec Command="$(UpdateCommand)"
          Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />
    
       <Exec Command="$(UpdateCommand)"
          LogStandardErrorAsError="true"
          Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
    </Target>
    
    
    <!-- Commands -->
    <UpdateCommand>$(NuGetCommand) update "$(PackagesConfig)" -source "$(PackageSources)" -id AutoUpdater $(NonInteractiveSwitch)</UpdateCommand>
    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>
    
    <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>
    
    <!-- We need to ensure packages are restored prior to assembly resolve -->
    <BuildDependsOn Condition="$(RestorePackages) == 'true'">
        RestorePackages;
        UpdatePackages;
        $(BuildDependsOn);
    </BuildDependsOn>
    

相关问题