如何在nuget中创建像Microsoft.AspNetCore.All这样的元包(所有包的包)?

Ham*_*thi 8 nuget nuget-package

新的meta包 - 所有包的包 - Microsoft.AspNetCore.All

Microsoft.AspNetCore.All代表什么?首先让我们回顾一下ASP.NET Core的第一个版本.微软随后宣布一切都将成为(nuget)软件包.甚至MVC本身也是一个nuget包.如果你想要MVC,你可以通过nuget安装它.如果你想启用CORS,你可以通过nuget安装它.像Node.js这样的东西与它的npm包有关.一切都是模块化的和有点的.您可以选择要安装的内容.即使这是非常整洁,它有其缺点.安装所有需要的软件包,更新它们,维护项目,删除未使用的软件包等都是很麻烦的.对于.NET或.NET Core的新手来说,这可能是非常令人厌恶的.

如何在nuget中为自己的库创建元数据包(所有包的包),如Microsoft.AspNetCore.All?

Mat*_*ard 8

元包是一个引用其他NuGet包的NuGet包,通常不包含任何程序集本身.

如果您创建.nuspec文件,下面是Microsoft.AspNetCore.All NuGet包的.nuspec文件的一部分,然后定义您的依赖项,然后您可以调用nuget pack YourNuSpecFile.nuspec以创建您的元包.

<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>Microsoft.AspNetCore.All</id>
    <version>2.0.0-preview2-final</version>
    <authors>Microsoft</authors>
    <owners>Microsoft</owners>
    <requireLicenseAcceptance>true</requireLicenseAcceptance>
    <licenseUrl>https://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm</licenseUrl>
    <projectUrl>https://www.asp.net/</projectUrl>
    <iconUrl>https://go.microsoft.com/fwlink/?LinkID=288859</iconUrl>
    <description>Microsoft.AspNetCore.All</description>
    <copyright>Copyright © Microsoft Corporation</copyright>
    <tags>aspnetcore</tags>
    <dependencies>
      <group targetFramework=".NETCoreApp2.0">
        <dependency id="Microsoft.AspNetCore" version="2.0.0-preview2-final" />
        <dependency id="Microsoft.AspNetCore.Diagnostics" version="2.0.0-preview2-final" />
        <dependency id="Microsoft.AspNetCore.Hosting" version="2.0.0-preview2-final" />
        <dependency id="Microsoft.AspNetCore.Routing" version="2.0.0-preview2-final" />
        <dependency id="Microsoft.AspNetCore.Server.IISIntegration" version="2.0.0-preview2-final" />
        <dependency id="Microsoft.AspNetCore.Server.Kestrel" version="2.0.0-preview2-final" />
        <dependency id="Microsoft.AspNetCore.Server.Kestrel.Https" version="2.0.0-preview2-final" />
      </group>
    </dependencies>
  </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

请注意,上面的一些依赖项已被删除,因为All NuGet包依赖于很多NuGet包.

NuGet包依赖项在依赖项部分中定义,您可以选择要依赖的最低版本.另请注意,上面的元包在组内部具有依赖关系,这限制了NuGet包支持的目标框架.下面的另一个例子是Xamarin.GooglePlayServices NuGet包.这里的.nuspec没有为依赖项指定组和目标框架.

<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>Xamarin.GooglePlayServices</id>
    <version>18.0.0</version>
    <title>Xamarin Google Play Services Binding (ICS)</title>
    <authors>Xamarin Inc.</authors>
    <owners>Xamarin Inc.</owners>
    <licenseUrl>http://components.xamarin.com/license/googleplayservices</licenseUrl>
    <projectUrl>http://components.xamarin.com/view/googleplayservices</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>C# bindings for google play services.</description>
    <copyright>Copyright 2013-2014</copyright>
    <dependencies>
      <dependency id="Xamarin.Android.Support.v4" version="20.0.0" />
      <dependency id="Xamarin.Android.Support.v7.MediaRouter" version="20.0.0" />
      <dependency id="Xamarin.Android.Support.v7.AppCompat" version="20.0.0" />
    </dependencies>
  </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

如果您的NuGet包支持的目标框架不多,那么最好指定组和目标框架.然后,如果不支持该项目,NuGet将不会尝试安装任何依赖项,并且它将在之前产生错误.

  • 看来您必须在`&lt;/ metadata&gt;`之后添加一个&lt;files /&gt;节点,以便nuget.exe不会将所有文件都尝试到该软件包中。 (2认同)