美食网站建设背景介绍,商场设计图平面图,vpswindows学生18公交车上,永兴县网站建设本篇将回答下面几个问题#xff1a;
如何解读NuGet Gallery上的包信息#xff1f;如何上传NuGet包到NuGet Gallery#xff1f;如何安装本地NuGet包#xff1f;NuGet包的内容文件与目录结构#xff1f;
如果你没看过上篇那么它在这里#xff1a;
6号咸鱼#xff1a;NuG…本篇将回答下面几个问题
如何解读NuGet Gallery上的包信息如何上传NuGet包到NuGet Gallery如何安装本地NuGet包NuGet包的内容文件与目录结构
如果你没看过上篇那么它在这里
6号咸鱼NuGet是什么理解与使用上 那么开始
一如何解读NuGet Gallery上的包信息
我们先以Newtonsoft.Json为例在其NuGet页面上可以看到如下页面其中包含了作者描述依赖等等信息。 其中重要的依赖关系部分如下 较大字体显示内容如.NETFramework 2.0表示Target Framework目标框架在Target Framework下面的为此Target Framework对应的依赖所以用一句话可以解读为“如果你项目的目标框架也是.NETFramework 2.0那么你就不需要依赖任何其它包就可以使用这个包”。同样的下面.NETFramework 1.0的含义就是“如果你的项目的目标框架为.NETFramework 1.0那么需要引用下面的包后才能使用该包。”不过这些都不需要你手动去引用NuGet会在你安装该包时自动安装其依赖的包。
Newtonsoft.Json这样的包是NuGet平台上的典型除此之外还有一些比较特殊但也非常重要的包。我们来看一下Microsoft.NETCore.Platforms下面是这个包的页面。 可以看到这个包竟然没有任何依赖这是因为这个包并不包含任何DLL所以也不需要依赖任何目标框架NuGet的包可以包含任何你想发布的文件而不仅仅是DLL程序集。
下面在介绍另一种比较特殊的包元包Meta Package Microsoft.AspNetCore.All就是一个元包 下面是它的页面。 页面上显示和普通的包并没有区别为了更直观的演示我们把这个包的nupkg文件下载到本地解压后可以看到在其lib目录下面只包含了一个空文件。 其实这个包本身并不包含内容它通过对其他包的依赖定义自己。元包是一个NuGet包的约定描述了一组放在一起有意义的包Metapackages are a NuGet package convention for describing a set of packages that are meaningful together.
这样做的原因首先是因为NuGet的包管理是“细粒度”的原则上每个程序集DLL都应该是一个包这样可以带来以下几个好处
细粒度的包在开发、测试的过程中与其它包的关联有限。细粒度的包可以提供对不同操作系统和CPU的支持。细粒度的包可以只依赖某个特定的库。在发布应用时未被引用的包不会成为应用的一部分因此应用程序的体积会有更小。
但是对于某些情况元包则有更多好处
在引用大量细粒度包时有更好的用户体验定义了一组经过测试且运行良好的包包括指定的各种版本
而下面这个元包比较特殊Microsoft.NETCore.App因为它不仅是元包也定义了框架也就是我们项目里的目标框架Tagrget Framework。这会在解读这类目标框架的元包时造成一定的困惑以 Microsoft.NETCore.App上的页面为例因为他本身定义了目标框架。不过我们应该不会手动去引用这些包这些包通常是在是设置目标框架是被项目隐式应用的。 下面这张图描述了这种关系API定义了框架框架用于元包中包的选择而这些包给你提供了API的实现。 更多资料可以查看下面这篇文章和其中文译文对你理解NuGet平台和包元包框架的设计很有帮助。
Packages, metapackages and frameworksdocs.microsoft.com.NET Core中的包、元包与框架www.cnblogs.com
二如何上传NuGet包
要上传NuGet包到NuGet Gallery首先你需要一个NuGet账号或者微软账号然后准备好你的nupkg文件就可以开始上传了。
下面简单介绍三种方式
1在NuGet Gallery网页上传包这是最方便快捷的方式。登录NuGet Gallery 点击Upload菜单进入上传页面。 nuget gallery包上传页面
点击Browse选择你的包文件页面将读取你的包信息并显示在页面上。 填写包的文档相关信息。 填写包的文档相关信息
确保所有信息正确后就可以点击Submit发布你的包了
2在NuGet Package Expolrer中上传包这个应用可以在Windows Store中免费安装。在使用该工具上传包之前你需要一个API Key因为除使用官方上传页面的方式外所有其他方式上传包都需要使用一个API Key这个Key可以在官方网站获取。在个人帐号的下拉菜单中选择API Keys。 进入API Key管理页面点击如下图的Create开始创建一个API Key。 填写好Key的名称过期时间再选择该Key可以使用的功能和对应的包点击确认成功创建后可以看到如下图的页面。 点击Copy就可以拷贝你的Key到剪贴板。有了API Key之后我们使用NuGet Explorer打开我们的包在File菜单中选择Publish. 点击Publish后出现如下界面。 输入所需的API Key点击Publish。
3使用 .net core SDK命令行上传包可以执行dotnet nuget push的命令其中第一个参数为包所在目录若再当前目录可直接填入文件名 -k参数就是我们在上面所获取到的API Key如下面的命令行示例。
dotnet nuget push foo.nupkg -k 4003d786-cc37-4004-bfdf-c4f3e8ef9b3a
该命令还有许多其他参数更多信息可前往下面的链接
dotnet nuget push command - .NET Core CLIdocs.microsoft.com
需要注意的是包上传后是不能被删除的只能被unlist。鉴于此我没有真的上传我的包因为知道一个完全没有意义的包在我的账号里还无法删除会让我寝食难安的。大家可以自己动手尝试。 三如何安装本地NuGet包
以Visual Studio 2017 Community为例打开你的项目右键点击项目选择【管理NuGet程序包】。 然后点击NuGet程序包管理界面右上角的齿轮出现下面的设置窗口。 点击号新建一个可用程序包源设置你想要的名称并选择源的所在目录点击确定。 再次打开NuGet程序包器你可以在程序包源选项中看到看添加的源选中后就可以看到你在该本地路径中放置的包了 四NuGet包的内容与目录结构
我们仍以Newtonsoft.Json包为例将后缀改为.zip并解压后可以看到以下目录结构。 其中lib目录如下图它保存了各个目标框架下对应的程序集。 Newtonsoft.Json.nuspec为xml格式的manifest文件保存了包的元数据如作者版本包含内容等等信息。rels[Content_Types].xmlpackage为打包时生成的文件。
除了这些目录外包内还可以包含runtimescontentbuildtools等文件夹下面介绍runtimes和content文件夹。
如果你的程序集对不同的操作系统有不同的实现你需要将这些程序集按照下面的目录结构放入runtimes文件夹中。
\runtimes\win10-arm\native\lib\uap10.0\win10-x86\native\lib\uap10.0\win10-x64\native\lib\uap10.0
而对于content文件夹你可以把它看做是目标项目的根目录也就是该文件夹下的内容会在包被安装时拷贝到项目的目录下。比如包里的content/images目录在包被安装之后就会在你的项目目录下放置一个images目录。
除了这些主要的文件夹NuGet包里还可以包含buildtools等文件夹和文件更多详细内容可查看下面的文档。
How to create a NuGet packagedocs.microsoft.com
希望本篇能让你对.net的包管理平台有基本的了解利用好NuGet平台会给你以后的项目开发提供很大的帮助。
最后如果你有任何问题欢迎在评论我会尽量解答。
如果喜欢类似的文章请关注非常感谢.net社区的壮大需要大家的努力。