【问题标题】:Use a .nuspec file/script to automatically install nuget packages into a new project使用 .nuspec 文件/脚本自动将 nuget 包安装到新项目中
【发布时间】:2017-07-03 21:38:41
【问题描述】:

我正在尝试将 nuget 包安装到新的 Visual Studio 项目中的过程自动化。我的想法是通过在可以运行以安装这些包的自定义文件中指定包来减少通过 nuget 包管理器获取所有包所需的时间。因此只需要每个新项目都包含这个文件并每次运行它。我对 nuget 非常陌生,并且在没有太多先验知识的情况下被分配了这项任务。我被告知 .nuspec 路线将引导我走向正确的方向,因为它包含有关包的元数据。尽管由于消费者无法直接访问包的 .nuspec 文件,但我无法理解如何将它用作这种自动化的一部分。我也听说过自动包恢复,但由于它只适用于丢失的参考,我看不出它对那些不一定引用与该项目有任何关系的新项目有什么帮助。

【问题讨论】:

    标签: visual-studio nuget nuget-package


    【解决方案1】:

    请注意,您不能简单地将预构建的 packages.config 文件放入 new 项目中并期望它能够正常工作。安装时,NuGet 会修改项目文件 (.csproj) 以包含引用并使用 packages.config 下载丢失的文件(以及更新/冲突逻辑)。

    使用 VS 2017(已发布稳定版本 15.2 及更高版本)和引用项目的 PackageReference 样式,您只需将 Directory.Build.props 文件拖放到包含您需要的所有项目的解决方案的根目录中:

    <Project>
      <ItemGroup>
        <PackageReference Include="Autofac" Version="3.5.2 />
        <PackageReference Include="Topshelf" Version="3.2.0 />
      </ItemGroup>
    </Project>
    

    这会将这些 NuGet 包添加到解决方案中的所有新项目,而无需修改 .csproj 文件。 (请注意,添加/编辑此文件后,您需要关闭并重新打开解决方案。这应该在即将到来的 VS 2017 15.3 更新中修复以编辑文件)。

    【讨论】:

      【解决方案2】:

      Nuget 已经支持安装自动化,我们可以使用 nuget 命令行来实现这一点

      每次你在 Visual Studio 中添加一个 nuget 包时,它都会被添加到一个名为 packages.config 的文件中。

      例如会是这样的

      <?xml version="1.0" encoding="utf-8"?>
      <packages>
        <package id="Autofac" version="3.5.2" targetFramework="net451" />  
        <package id="Microsoft.Owin" version="3.1.0" targetFramework="net452" />
        <package id="Microsoft.Owin.Host.HttpListener" version="3.0.1" targetFramework="net451" />
        <package id="Microsoft.Owin.Hosting" version="3.1.0" targetFramework="net452" />
        <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net451" />
        <package id="Owin" version="1.0" targetFramework="net451" /> 
        <package id="Topshelf" version="3.2.0" targetFramework="net451" />
      </packages>
      

      您的解决方案中的每个项目都会有 packages.config 文件。您可以转到所有项目的父文件夹并简单地运行命令“nuget restore”,它将为您获取所有包。

      为此,nuget.exe 需要单独为downloaded。有关 nuget 命令行的更多详细信息,请参阅here,这里是commandline reference

      编辑:

      感谢@Martin Ullrich 指出。需要说明的是,上述方法不会自动添加对项目文件的引用,它只会将包获取到包文件夹中。在VS2017 中,@Martin 的答案是支持地址。

      希望这会有所帮助!

      【讨论】:

      • 并不是说你不能只将packages.config文件放到一个新项目中,因为package install需要编辑csproj文件并且项目的targetFramework可能不匹配。
      • 感谢您指出这一点。我没有意识到新项目添加参考场景。
      猜你喜欢
      • 2015-08-17
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2023-04-09
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      相关资源
      最近更新 更多