如果我有一个早已封装好的dll,要让10个人使用,再修改后重新生成dll后,要传给这10个人,可不可以通过一个工具,让他来管理我的dll包,我在修改包后,其他人只需更新,摆脱粘贴复制的苦恼。其实NuGet就帮我解决了这个问题。
NuGet是一个Visual Studio的扩展,通过这个扩展,我们可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通过NuGet来安装一些Visual Studio的插件等。这样就可以做到公共组件共享,现在我将一步步介绍如何以将自己所开发的类库包发布到nuget上,供多人使用。
在NuGet官网登录,找到自己的ApiKey,然后使用以下命令设置NuGet API Key:
nuget setApiKey <my_api_key>
例如我的ApiKey为:
写自己的类库:
<span style="font-size: 18px;">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; n</span><span style="font-size:18px;">amespace MyCloass { public class Helper { public static String GetName() { return "zhudan"; } } } </span>然后,打开AssemblyInfo.cs文件,将assembly的属性设置好,记得再设置一下AssemblyVersion特性,以指定我们类库的版本。目前使用1.0.0.0版本:
<span style="font-size:18px;">using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // 有关程序集的常规信息通过以下 // 特性集控制。更改这些特性值可修改 // 与程序集关联的信息。 [assembly: AssemblyTitle("MyClass")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Microsoft")] [assembly: AssemblyProduct("MyCloass")] [assembly: AssemblyCopyright("Copyright © Microsoft 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // 将 ComVisible 设置为 false 使此程序集中的类型 // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, // 则将该类型上的 ComVisible 特性设置为 true。 [assembly: ComVisible(false)] // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID [assembly: Guid("abf1fb63-7d11-48d9-8db6-64fd9b0bef0f")] // 程序集的版本信息由下面四个值组成: // // 主版本 // 次版本 // 生成号 // 修订号 // // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] </span>
nuspec是NuGet将项目打包成nupkg的输入文件,可以通过nuget spec命令产生。在命令提示符下,进入MyCloass.csproj文件所在目录,我的目录为:C:\Users\ZhuDan\Desktop\wyx\MyCloass\MyCloass 然后执行一下命令:
nuget spec提示创建成功:
记事本打开MyCloass.nuspec文件,把需要替换的信息替换掉,不需要的tag全部删掉,注意里面的$xxx$宏,这些就是引用了AssemblyInfo.cs中的设置值,在编译产生package的时候,会使用AssemblyInfo.cs中的相应值进行替换。完成编辑后,我们的nuspec文件如下:
<?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>MyClass</description> <copyright>Copyright 2014</copyright> </metadata> </package>
同样在MyCloass.csproj路径下,使用下面的命令产生NuGet类库包:
nuget pack <span style="font-size:18px;">MyCloass</span>.csproj成功后提示:
发布类库包使用命令:
nuget push MyCloass.1.0.0.0.nupkg完成后提示成功:
此时登录NuGet,进入Manage My Packages下,可以看到自己刚刚发布的包。
新建一个应用程序,在项目上点右键,选择管理解决方案的Nuget程序包;
在搜索框中输入Myclass,此时我们发布的Package已经可以显示了:
单击安装,NuGet会自动分析组件依赖关系,然后把所需要的所有程序集都下载下来并添加到项目引用中:
这样就可以引用,写入自己的代码了。
随着类库的开发,必然会有版本的更新。更新类库很简单,只需要在AssemblyInfo.cs中更新一下版本号,然后重新执行上面的第六和第七就可以了。执行第七的时候,nupkg的文件名应该使用新版本的文件名(修改版本号就可以了)。
现在就来修改项目,将返回值修改了,打开AssemblyInfo.cs,修改版本号为1.1.1.1,重新编译、产生、发布。
再打开测试程序,更新新的MyClass。
Nuget会自动保存包的历史版本,可以在vs中根据自己的需要引用不同版本的包,传入的包不能够删除,只能更改它在vs中显示不显示。
善于利用工具,提高效率!