轻歌漫舞 發表於 2021-9-7 15:38:00

10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)

<h1><span style="font-size: 16px">前言</span></h1>
<blockquote>
<p><span style="font-size: 16px">  NuGet就是一个包(package)管理平台,确切的说是 .net平台的包管理工具,它提供了一系列客户端用于生成,上传和使用包(package),以及一个用于存储所有包的中心库。</span></p>
<p><span style="font-size: 16px">  对于一个现代化的开发平台,建立一种让开发者创建,分享与使用可复用代码的机制是十分必要的。</span><span style="font-size: 16px">这种“可复用代码”被打包后的文件通常被称作“包”(package),</span></p>
<p><span style="font-size: 16px">对于.NET<em>(包括 .NET Core)</em>平台来说这个机制的实现就是NuGet平台。</span></p>
<p><span style="font-size: 16px">  NuGet的实现均为开源项目,包括了客户端工具,服务器,官方网站以及各语言的文档等。</span></p>
<p><span style="font-size: 16px">  NuGet包的本质是一个以nupkg为后缀的zip压缩文件<em>(你可以将后缀改为.zip后解压查看里面的内容)</em>,其中包含了编译后的Dll文件以及其他相关文件。</span></p>
</blockquote>
<p><span style="font-size: 16px"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210906165739351-2027069111.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<p>            图1:显示nuget包从创建,上传到被使用的流程</p>
<p><span style="font-size: 16px">对于引用大家都会使用,但是对于创建NuGet引用就不怎么会了,我们下面就介绍怎么打包dll类库到NuGet平台进行引用。</span></p>
<h1><span style="font-size: 16px">创建类库方法</span></h1>
<p><span style="font-size: 16px">我们首先创建一个可调用的类库,以“<strong>繁简体相互转换</strong>”为例,当然你也可以创建其他的,比如获取配置文件、http请求帮助类等。</span></p>
<p><span style="font-size: 16px">这里使用的环境是vs2019, .NET Core2.1,使用.NET也可以,这里可根据自己的使用环境创建。</span></p>
<p><span style="font-size: 16px">注意:类库是什么环境,引用也需要什么环境。(.NET Core和.NET不能相互混用)。</span></p>
<p><span style="font-size: 16px">创建一个.NET Core类库项目,命名为“<strong>XiongZeUtils</strong>”(自定义命名),然后在类库项目下创建一个繁简体项目转换的类,命名为“<strong>xzUtils</strong>”(自定义)。</span></p>
<p><span style="font-size: 16px">注意,繁简体相互转换需要现在NuGet引入包ChineseConverter,然后在类里面引用using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter,如下:</span></p>
<p><span style="font-size: 16px; color: rgba(255, 0, 0, 1)">创建完成后记得需要先编译生成dll文件</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;

</span><span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> XiongZeUtils
{
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> xzUtils
    {
      </span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
      <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 简体转换为繁体
      </span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
      <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="str"&gt;</span><span style="color: rgba(0, 128, 0, 1)">简体字</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
      <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;</span><span style="color: rgba(0, 128, 0, 1)">繁体字</span><span style="color: rgba(128, 128, 128, 1)">&lt;/returns&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> GetTraditional(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> str)
      {
            </span><span style="color: rgba(0, 0, 255, 1)">string</span> r = <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.Empty;
            r </span>=<span style="color: rgba(0, 0, 0, 1)"> ChineseConverter.Convert(str, ChineseConversionDirection.SimplifiedToTraditional);
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> r;
      }
      </span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
      <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 繁体转换为简体
      </span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
      <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="str"&gt;</span><span style="color: rgba(0, 128, 0, 1)">繁体字</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
      <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;</span><span style="color: rgba(0, 128, 0, 1)">简体字</span><span style="color: rgba(128, 128, 128, 1)">&lt;/returns&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> GetSimplified(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> str)
      {
            </span><span style="color: rgba(0, 0, 255, 1)">string</span> r = <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.Empty;
            r </span>=<span style="color: rgba(0, 0, 0, 1)"> ChineseConverter.Convert(str, ChineseConversionDirection.TraditionalToSimplified);
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> r;
      }
    }
}</span></pre>
</div>
<p>&nbsp;<span style="font-size: 16px; color: rgba(255, 0, 0, 1)">创建完成后记得需要先编译生成dll文件</span></p>
<hr>
<h1><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">NuGet发布到服务器<br></span></h1>
<h2><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">1、登录NuGet账号获取</span><span class="ms-noWrap">API keys</span></h2>
<p><span class="ms-noWrap" style="font-size: 16px">官网地址:https://www.nuget.org/</span></p>
<p><span style="font-size: 16px">如果你有Microsoft 帐户,直接登录即可。如果没有则需去创建一个。</span></p>
<p><span style="font-size: 16px"><strong><em>NuGet登录快捷入口</em></strong>:https://www.nuget.org/users/account/LogOn</span></p>
<p><span style="font-size: 16px">(注册地址入口比较难找,下面快捷入口直接点击即可注册)</span></p>
<p><span style="font-size: 16px"><strong><em>NuGet注册账号快捷入口</em></strong>:https://signup.live.com/?lic=1</span></p>
<p><span style="font-size: 16px">备用方案:</span></p>
<blockquote>
<p>NuGet.org 上的个人帐户:https://docs.microsoft.com/en-us/nuget/nuget-org/individual-accounts</p>
<p>获取您的 API 密钥:https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio?tabs=netcore-cli</p>





</blockquote>
<p>&nbsp;</p>
<p><span style="color: rgba(255, 0, 0, 1); font-size: 16px"><strong><em>获取您的 API 密钥</em></strong></span></p>
<ol>
<li>
<p>登录您的 nuget.org 帐户或创建一个帐户(如果您还没有)。</p>
<p>有关创建帐户的更多信息,请参阅个人帐户。</p>





</li>
<li>
<p>选择您的用户名(在右上角),然后选择API Keys。</p>





</li>
<li>
<p>选择Create,为您的密钥提供一个名称,选择Select Scopes &gt; Push。为Glob 模式输入 *&nbsp;,然后选择Create。(有关范围的更多信息,请参见下文。)</p>





</li>
<li>
<p>创建密钥后,选择复制以在 CLI 中检索您需要的访问密钥:</p>
<p><img src="https://docs.microsoft.com/en-us/nuget/quickstart/media/qs_create-02-apikey.png" alt="将 API 密钥复制到剪贴板" data-linktype="relative-path"></p>





</li>
<li>
<p>重要提示:将您的密钥保存在安全位置,因为您以后无法再次复制该密钥。如果返回 API 密钥页面,则需要重新生成密钥才能进行复制。如果您不想再通过 CLI 推送包,您也可以删除 API 密钥。</p>





</li>





</ol>
<p>范围允许您为不同的目的创建单独的 API 密钥。每个密钥都有其到期时间范围,并且可以限定为特定的包(或 glob 模式)。每个键也适用于特定操作:推送新包和更新、仅推送更新或下架。通过范围界定,您可以为为您的组织管理包的不同人员创建 API 密钥,以便他们仅拥有所需的权限。有关更多信息,请参阅作用域 API 密钥。</p>
<p>&nbsp;</p>
<p><span style="font-size: 16px"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907094345841-1195620158.png" alt="" width="1000" height="482" loading="lazy"></span></p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907095316204-2139864730.png" alt="" width="998" height="703" loading="lazy"></p>
<p><span style="font-size: 16px"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907095634371-860581804.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<hr>
<p>&nbsp;</p>
<h2><span style="font-size: 16px">2、下载Nuget.exe并发布项目</span></h2>
<p><span style="font-size: 16px">点击下载nuget.exe</span></p>
<blockquote>
<p>https://www.nuget.org/downloads</p>





</blockquote>
<p><span style="font-size: 16px">我这里下载的是5.9.1版本的,版本这里没有特别的要求。</span></p>
<p><span style="font-size: 16px">这里只有6M多一点,下载太慢了,我把下载好的放在gitee上,大家直接点击下载解压即可。</span></p>
<p><span style="font-size: 16px">下载地址1(git):https://gitee.com/xiongze/nugetexe-file.git</span></p>
<p><span style="font-size: 16px">下载地址2(百度网盘):https://pan.baidu.com/s/1RIbJXzn3aoKWURB_VRjx3w&nbsp; &nbsp; &nbsp;提取码:xion</span></p>
<p><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907100437233-2057935479.png" alt="" width="1042" height="450" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<hr>
<h2><span style="font-size: 16px">3、NuGet发布到服务器</span></h2>
<p><strong><span style="font-size: 16px"><span style="color: rgba(0, 0, 0, 1)">将下载下来的nuget.exe</span>与刚才新建的类库放在同一目录下。</span></strong></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907101936450-1474150939.png" alt="" loading="lazy"></span></p>
<p><strong><span style="font-size: 16px">&nbsp;配置发布信息,并将发布路径指向或拷贝到与刚才新建的类库放在同一目录下。</span></strong></p>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907102501840-2120063922.png" alt="" width="1066" height="554" loading="lazy"></span></p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907102631878-1882615259.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt"><strong>①、找到vs对应的开发人员命令提示(不能用cmd直接打开)</strong></span></p>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907102941078-1338777454.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">&nbsp;或者&nbsp;C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools</span></p>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907103049129-53554883.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt"><strong><span style="color: rgba(0, 0, 0, 1)">②</span>命令提示定位到Nuget.exe所在的目录</strong></span></p>
<p><span style="font-size: 16px">&nbsp;双击运行&nbsp;<strong><code>Developer Command Prompt for VS 2019</code>&nbsp;</strong>&nbsp;cd到项目类库的目录</span></p>
<p><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907103647045-1588119339.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 14pt">&nbsp;③通过命令 nuget setapikey&nbsp; xxxxx-xxxx-xxx-xxxx-xxxx-xxxx&nbsp;(我们上面nuget copy的key), 设置API Key</span></strong></p>
<p><span style="font-size: 16px">通过命令<strong> nuget setapikey&nbsp;&nbsp;xxxxx-xxxx-xxx-xxxx-xxxx-xxxx</strong> , 设置API Key;</span></p>
<p><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907104113974-1392806223.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 14pt">&nbsp;④生成xxxx.nuspec文件</span></strong></p>
<p><span style="font-size: 16px">nuspec是NuGet将项目打包成nupkg的输入文件,可以通过nuget spec命令产生。<br><code>通过命令 <strong>nuget spec</strong> 生成xxxx.nuspec文件;</code></span></p>
<p><span style="font-size: 16px"><strong><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907104714740-1836457853.png" alt="" loading="lazy"></strong></span></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 14pt">&nbsp;⑤NuGet发布到服务器</span></strong></p>
<p><span style="font-size: 16px">通过命令 <strong>nuget.exe push xxxxx.nupkg -Source https://www.nuget.org</strong> ,将NuGet发布到服务器。</span></p>
<p><span style="font-size: 16px"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907105002477-1090567943.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">打包成功后,这里需要等待3-10分钟左右,打包成功后nuget就能查询到我们打包的引用了,如果没有的多等待一下。</span></p>
<hr>
<p>&nbsp;</p>
<h1><span style="font-size: 16px">使用NuGet包</span></h1>
<p><span style="font-size: 16px">我们这个时候就可以在NuGet里面搜索到我们的类库了,我们引入进来使用一下。</span></p>
<p><span style="font-size: 16px"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907105358920-1247100082.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">&nbsp;在项目中引入我们的nuget包,然后调用得到下面内容</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px"><img src="https://img2020.cnblogs.com/blog/1093832/202109/1093832-20210907105924044-1980013888.png" alt="" loading="lazy"></span></p>
<hr>
<h1><span style="font-size: 16px">参考文献&nbsp;</span></h1>
<ul>
<li> Nuget包发布流程:https://www.52pojie.cn/thread-1434899-1-1.html</li>
<li>
<p class="Post-Title">NuGet是什么:https://zhuanlan.zhihu.com/p/36207092</p>
</li>
<li>nuget官网地址:https://www.nuget.org/</li>
</ul>
<table style="height: 149px; background-color: rgba(110, 151, 104, 1); width: 100%" border="2" align="left">
<tbody>
<tr>
<td>
<div style="float: left">&nbsp;</div>
<div style="float: left; margin: 0 0 0 10px; color: rgba(255, 255, 255, 1)"><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 14px"> <strong>欢迎关注订阅微信公众号【熊泽有话说】,更多好玩易学知识等你来取</strong></span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 14px">
                              <strong>作者:熊泽-学习中的苦与乐</strong></span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 14px"><strong>公众号:熊泽有话说</strong></span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 14px">
                              <strong>
                                    出处:&nbsp;https://www.cnblogs.com/xiongze520/p/15234581.html</strong></span><br><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 14px">
                              <strong>
                                    创作不易,任何人或团体、机构全部转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。
                              </strong> &nbsp;

                            </span></div>
<p><span style="font-family: &quot;Microsoft YaHei&quot;; font-size: 14px">&nbsp;</span></p>































































            </td>































































      </tr>































































</tbody>






























































</table>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/1093832/202108/1093832-20210823163948985-309495620.png" alt="" width="514" height="239" loading="lazy"></p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:熊泽-学习中的苦与乐,转载请注明原文链接:https://www.cnblogs.com/xiongze520/p/15234581.html</p><br><br>
来源:https://www.cnblogs.com/xiongze520/p/15234581.html
頁: [1]
查看完整版本: 10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)