使用.nuspec文件/脚本自动将nuget包安装到新项目中

时间:2017-06-28 08:12:53

标签: visual-studio nuget nuget-package

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

2 个答案:

答案 0 :(得分:1)

请注意,您不能简单地将预先构建的packages.config文件放入项目中,并期望它能够正常运行。安装时,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更新中修复,以便编辑文件。)

答案 1 :(得分:0)

  

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

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

E.g。会是这样的

    public static class AutoFacRequestLog
{
    private static object syncer = new object();
    private static List<Type> RequestedTypes { get; set; } = new List<Type>();

    public static void AddRequest(Type type)
    {
        lock (syncer)
            RequestedTypes.Add(type);
    }

    public static IEnumerable<Type> GetMostRecent(int i)
    {
        lock (syncer)
            return RequestedTypes.Skip(Math.Max(0, RequestedTypes.Count - i)).Take(i);
    }
}

解决方案中的每个项目都有packages.config文件。您可以转到所有项目的父文件夹,只需运行命令'nuget restore',它将为您获取所有包。

要使其正常工作,nuget.exe需要单独downloaded。可以找到nuget命令行的更多详细信息here,这里是commandline reference

修改

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

希望这有帮助!