最近在看ASP.NET Core MVC的教材,几乎每章开始都要重复从Empty project开始创建一个ASP.NET Core的项目,然后手动修改project.json,增加经典三目录(Models,Controllers,Views)之类的,然后接着基于这个基本项目进行介绍某个特定的功能。

这种示例代码每次都重复创建很没有技术含量,通常都是复制粘贴,所以考虑把这部分示例代码做成一个自动化的。之前有看到有ASP.NET Identity的示例的Nuget程序包,就是安装之后,自动创建了相关的类文件,同时也修改了web.config,最终效果是安装了package之后,直接能起来。

遵循这个想法,也打算创建一个ASP.NET Core MVC的基本示例Nuget包。于是从新复习了一个创建Nuget包的文档,发现情况不是那么直接,用之前基于非.NET Core的程序的创建包的方式,行不通。

查看了Nuget提供的文档说明(https://docs.microsoft.com/zh-cn/nuget/),也没找到很直接的说明如何创建.NET Core程序包的介绍文档,反而看到有介绍创建.NET Standard程序包的文档。这是什么情况,按道理不可能,可能方向不对?直接bing了一下,也没有找到stackflow上的最佳答案,其实也没深入去找,我是觉得自己走错了方向。

于是把介绍创建.NET Standard的文档(https://docs.microsoft.com/zh-cn/nuget/guides/create-net-standard-packages-vs2015)看了一遍,看到前面的介绍终于明白了,原来是换了个壳,没有之前那么直接了,必须通过创建.NET Standard包的方式实现对.NET Core程序的支持。

为什么是.NET Standard?.NET Standard定义了支持所有.NET平台的BCL程序集API,理论上说.NET Standard支持下的程序集可以在多个不同的.NET平台运行,比如.NET Framework,.NET Core, Mono等等。而对于不同的.NET平台,对.NET Standard的版本支持也不同,完成的支持列表可参考https://docs.microsoft.com/en-us/dotnet/articles/standard/library的说明,下图是引用自官网的一个版本支持图

参考需要支持的.NET平台的版本,可以看到平台支持的最高版本的.NET Standard的版本号,同时也说明支持之前版本的.NET Standard。

说的比较拗口,比如我这里需要支持.NET Core程序,而且是.NET Core 1.0版本,那么这个版本支持的最高.NET Standard版本是1.6,同时也兼容1.6之前的版本。

好了前面介绍了一下背景知识,那么了解完之后我们就很清楚如果要创建支持.NET Core的Nuget包,那么我们需要创建一个支持.NET Standard的Nuget包,并且设置支持的版本即可。

结合Nuget官方的文档,我们一步步来创建并发布一个Demo版的支持.NET Core 1.0版本的Nuget包。

1 用Visual studio 2015新建一个Class Library Portable项目

项目名称自定义,通常用于最终Nuget包的名称

2 点击确定之后弹出选择需要的Targets,也就是支持的.NET平台

这里选择支持.NET Framework和ASP.NET Core

3.点击OK之后,项目创建完成,然后右键点击解决方案,打开属性窗口

选择点击”Target.NET Platform Standard”,之后会有一个Confirm,当然是选择“Yes”

然后属性窗口的Target变成了一个下拉选项,这里我们选择.NET Standard1.4版本即可(根据版本支持图,.NET Core 1.0可以支持这个版本)

之后再次Confirm,Yes

3 设置Build,选择Release,并勾选中XML documentation file,后面需要用到

4 到此项目的属性设置完成,然后把默认生成的Class1改一下,好歹改成一些有意义的东西,我改成如下内容。

public class Demo
{public void Run(){Console.WriteLine($"You're using my demo package at {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");}
}

5 项目代码已经足够了,接下来使用Nuget命令行工具,Nuget命令行工具用的是3.5版本,官方有得下载,这里把Nuget.exe文件放到了项目根目录下。

6 然后CMD到项目所在的目录,运行nuget spec,创建一个spec文件,这个文件干嘛的不多说了,官方文档有详细说明

nuget spec

然后得到一个Shenba.DemoPackage.Core.nuspec文件

7 用文本编辑器,比如notepad++编辑Shenba.DemoPackage.Core.nuspec文件

把各个$符号的变量都改成自己的内容,比如如下内容

<?xml version="1.0"?>
<package ><metadata><id>Shenba.DemoPackage.Core</id><version>1.0.0</version><title>Shenba.DemoPackage.Core</title><authors>shenba</authors><owners>shenba</owners><requireLicenseAcceptance>false</requireLicenseAcceptance><description>demo package for dotnet core</description><releaseNotes>demo package for dotnet core released.</releaseNotes><copyright>Copyright 2017</copyright><tags>dotnet core demo package</tags></metadata>
</package>

注意id不要相同,否则后面没法提交

8 继续编辑nuspec文件,加入<files>节点(跟metadata一个级别),并设置内容如下

<files><file src="bin\Release\Shenba.DemoPackage.Core.dll" target="lib\netstandard1.4\Shenba.DemoPackage.Core.dll" /><file src="bin\Release\Shenba.DemoPackage.Core.xml" target="lib\netstandard1.4\Shenba.DemoPackage.Core.xml" />
</files>

9 在Release配置下,编译解决方案后,在命令行执行如下命令(还是在项目的根目录下)

nuget pack Shenba.DemoPackage.Core.nuspec

之后会生成一个Shenba.DemoPackage.Core.1.0.0.nupkg文件,这个就是最终要发布的包文件

实际上这是一个压缩包(把后缀名改成zip),可以用RAR工具查看里面的文件结构,如下图

可以看到里面包含了常见的lib目录,并且打开后是netstandard1.4目录,然后是具体的程序集文件和XML文档。

10 接下来就是把这个包发布到nuget.org

发布到nuget.org需要使用自己的账号发布,如果通过命令行发布还需要生成自己的一个API key,具体可以参考https://docs.microsoft.com/zh-cn/nuget/create-packages/publish-a-package的说明。

这里给出发布的package的命令行,其中XXXX是注册后得到的API key

nuget push Shenba.DemoPackage.Core.1.0.0.nupkg XXXX –Source nuget.org

11 push之后是不能立即在nuget搜索到的,这跟之前的非.NET Standard的是一样的,不过可以在自己的Account下看到发布的包

12 在.NET Core项目中使用刚发布的Demo package

这个跟使用普通的.NET Core的Package一样,修改project.json或者使用界面的package manager引入,比如直接在project.json的dependencies节点加入package的引用

{"version": "1.0.0-*","buildOptions": {"emitEntryPoint": true},"dependencies": {"Microsoft.NETCore.App": {"type": "platform","version": "1.0.1"},"Shenba.DemoPackage.Core": "1.0.0"},"frameworks": {"netcoreapp1.0": {"imports": "dnxcore50"}}
}

保存之后当然也会自动的restore,然后会显示在引用中

当然代码里调用这个package的类也是没有问题的,调用代码就不说了,就是个示例而已。

13 在.NET Framework 4.6.1的项目中使用该Demo package

一开始提到这个package是基于.NET Standard1.4版本的,根据版本支持图,.NET Framework 4.6.1的项目也是可以引用这个包的。

新建一个.NET Framework 4.6.1的控制台项目,package控制台运行

Install-Package Shenba.DemoPackage.Core

同样也是能正确被引用和调用的,下面是packages.config的内容

<packages><package id="Shenba.DemoPackage.Core" version="1.0.0" targetFramework="net461" />
</packages>

小结

以上是创建并发布一个可用于.NET Core(当然也可用于.NET Framework)的Nuget包过程,大致流程跟发布普通的Nuget包相同,但需要注意选择需要支持的.NET Standard的版本。

后续会准备一个更加有意义的.NET Core包,可用于生成ASP.NET MVC Core的学习示例代码。

(目前针对dotnet core项目的nuget包,还不支持执行包里的代码模板和识别Content内容,所以暂时无法实现

详情参考 https://docs.microsoft.com/zh-cn/nuget/create-packages/project-json-impact)

这个Demo的示例代码路径

https://github.com/shenba2014/AspDotNetCoreMvcExamples/tree/master/DemoPackageCore

转载于:https://www.cnblogs.com/shenba/p/6540026.html

创建.NET Core程序的Nuget Package相关推荐

  1. 在Typescript中使用ASP.NET Core SignalR和React创建实时应用程序

    目录 介绍 ScrumPoker应用程序 源代码 开发工具 基本步骤 后端代码 创建Hub 在Startup中注册集线器 创建持久性 让我们为客户端应用程序公开一些终端 启用Cors 前端代码 结论 ...

  2. 使用插件创建 .NET Core 应用程序

    使用插件创建 .NET Core 应用程序 本教程展示了如何创建自定义的  AssemblyLoadContext  来加载插件.AssemblyDependencyResolver  用于解析插件的 ...

  3. 10分钟 在linux里创建.net core helloworld控制台程序

    官方教程 安装linux https://www.cnblogs.com/LittleFeiHu/p/9749455.html 第一步 :选择和你本机适用的Linux版本,我这里用的是18.04. 第 ...

  4. 使用VS Code 开发.NET CORE 程序指南

    1. 前言 近两年来,很多前端的同学都开始将 VSCode 作为前端主力开发工具,其丰富的扩展给程序开发尤其是前端开发带来了很多便利,但是作为微软主力语言的 .NET,却由于有宇宙第一IDE Visu ...

  5. 基于 .Net Core 的组件 Nuget 包制作 amp; 发布

    微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布. 之前 . ...

  6. activereports_报表 ActiveReports 迎来 .Net Core 时代!一键创建 .Net Core 项目

    近期,葡萄城报表控件ActiveReports V14.0 正式发布,全面支持 .NET Core平台.同时,在本次更新中 ActiveReports的桌面报表设计器UI得以全面增强,报表预览方式得以 ...

  7. 以Windows服务方式运行.NET Core程序

    原文:以Windows服务方式运行.NET Core程序 在之前一篇博客<以Windows服务方式运行ASP.NET Core程序>中我讲述了如何把ASP.NET Core程序作为Wind ...

  8. 使用Azure DevOps Pipeline实现.Net Core程序的CI

    上次介绍了Azure Application Insights,实现了.net core程序的监控功能.这次让我们来看看Azure DevOps Pipeline功能.Azure DevOps Pip ...

  9. Grpc Proto To Nuget Package 插件使用说明

    Grpc Proto To Nuget Package 是一个 VS 插件(支持 VS2019+),目的是将基于 gRPC 的接口定义 .proto 文件一键转成 Nuget Package,然后发布 ...

最新文章

  1. 微软职位内部推荐-Principal Dev Manager
  2. maven 内置参数
  3. 大道至简 23种模式一点就通
  4. 我是如何在两天内做完一个网站的
  5. android中可口的吐司,一种信息提示机制——Toast
  6. android中对sd卡的 操作文件问题 创建目录 创建文件到指定目录
  7. 【Java多线程】创建多线程的三种方式
  8. ABAP 泛型处理的overhead - generic programming
  9. android炫酷叼ui,XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!
  10. 计算机软著研究生毕业,关于研究生推免工作科研成果和竞赛计分详细说明
  11. 安卓系统dicom阅读器_麻雀虽小,体验倍儿好——文石 POKE2黑白屏/彩屏电纸书阅读器评测...
  12. 渗透开发-XSS扫描器
  13. C++独立游戏存档模块设计
  14. 华为性格面试的技巧方法
  15. matlab绘制频谱图代码,用MATLAB实现函数的频谱图
  16. docker+selenium+node-chrome-debug(node-firefox-debug)完成自动化测试环境的部署
  17. 计算机网络 华南理工大学期末重点 第二章 物理层 谢希仁
  18. 小程序直播公测,微信再造电商梦?
  19. 浮点数比大小(C语言版)
  20. ndk-build 添加window环境变量

热门文章

  1. Darwin Streaming Server 安装流程
  2. 兰州网络教育计算机基础考试,2017年兰州事业单位公共基础备考:计算机基础知识...
  3. Helm 3 完整教程(三):chart 的文件结构和字段详解
  4. android原生插件,适用于 Android 的原生 (C++) 插件
  5. mysql 列 随机数_MYSQL中生产随机数或随机字符串
  6. 【CCCC】L3-003 社交集群 (30分),并查集模板,map排序
  7. 【HNOI2003】【BZOJ1216】操作系统(模拟,优先队列)
  8. 【Luogu1182】数列分段Section II(二分)
  9. UVa1368 - DNA Consensus String
  10. 易语言修改虚拟机硬盘id_易语言本地虚拟机源码