原文

可以在内网部署自己的私人NuGet仓储服务。

Setting it up

本例中我们创建一个发邮件的类,将其作为我们自己的NuGet包:

  1. using System;
  2. using System.Net.Mail;
  3. namespace MyCompany.WebCommon
  4. {
  5. /// <summary>
  6. /// Contains code to send a HTML email using SMTP
  7. /// </summary>
  8. public class Emailer
  9. {
  10. /// <summary>
  11. /// Contains the error message if SendMail fails
  12. /// </summary>
  13. public string Error { get; private set; }
  14. /// <summary>
  15. /// Sends an email, returns false if failed
  16. /// </summary>
  17. /// <param name="emailAddress">Email address to send to - only one address allowed</param>
  18. /// <param name="subject">Subject line of email</param>
  19. /// <param name="emailBodyHtml">Contents of email - make sure to escape any HTML</param>
  20. /// <param name="emailFrom">Email address the email comes from (can be anything)</param>
  21. /// <param name="smtpServerName">Smtp server name</param>
  22. /// <returns>boolean indicating email was sent (not neccesarily delivered)</returns>
  23. public bool SendEmail(
  24. string emailAddress,
  25. string subject,
  26. string emailBodyHtml,
  27. string emailFrom,
  28. string smtpServerName = "localhost")
  29. {
  30. SmtpClient Smtp_Server = new SmtpClient();
  31. MailMessage e_mail = new MailMessage();
  32. Smtp_Server.Host = smtpServerName;
  33. e_mail = new MailMessage();
  34. e_mail.From = new MailAddress(emailFrom);
  35. e_mail.To.Add(emailAddress);
  36. e_mail.Subject = subject;
  37. e_mail.IsBodyHtml = true;
  38. e_mail.Body = emailBodyHtml;
  39. try
  40. {
  41. Smtp_Server.Send(e_mail);
  42. }
  43. catch (Exception e)
  44. {
  45. this.Error = e.ToString();
  46. return false;
  47. }
  48. return true;
  49. }
  50. }
  51. }

假设我们有五个项目都要有发邮件的功能,我们希望这五个项目都能复用上面的类。

首先,创建一个解决方案,创建如上的类,编译项目:

这里有两处要注意。首先编辑Properties/AssemblyInfo.cs文件为你的程序集添加描述。同时可以设置公司名,作者等。

第二个要注意的是确保启用了xml comment文件生成,这样才有智能提示。注意修改XML扩展名为小写。

在控制台中cd到.csproj文件的所在目录,然后执行下面的命令:

  1. nuget spec

这会生成一个名为MyCompany.WebCommon.nuspec的文件,内容如下:

  1. <?xml version="1.0"?>
  2. <package >
  3. <metadata>
  4. <id>$id$</id>
  5. <version>$version$</version>
  6. <title>$title$</title>
  7. <authors>$author$</authors>
  8. <owners>$author$</owners>
  9. <requireLicenseAcceptance>false</requireLicenseAcceptance>
  10. <description>$description$</description>
  11. <projectUrl>http://myserver/wiki/MyCompany.WebCommon.html</projectUrl>
  12. <releaseNotes>Initial release of code library to send emails</releaseNotes>
  13. <copyright>Copyright 2016</copyright>
  14. <tags>MyCompany Web Common Emailer Emails</tags>
  15. </metadata>
  16. </package>

这个文件被NuGet用来创建你的package。

注意上面的$XXX$,NuGet会自动查看AssemblyInfo.cs文件使用对应的meta data替代掉nuspec文件中的$XXX$。

然后编译项目,执行下面的命令:

  1. NuGet Pack

这将创建一个名为MyCompany.WebCommon.1.0.0.0.nupkg的文件 - 这个就是你的第一个package。

设置你的私有NuGet server

Tools -> options -> NuGet Package Manager -> Package Sources

注意添加/nuget到你的私有仓储url。

And you can now add the package to your project! Right click on your project, select Manage NuGet packages and you should see:

更新的你包

修改下SendEmail() :

修改**AssemblyInfo.cs **文件中的AssemblyVersion和AssemblyFileVersion为1.1,重编译项目。然后使用nuget pack重新构建package。

新package的版本为1.1。这意味将它发布到你的私人仓储中去不会覆盖1.0的版本。The new package has the 1.1 version number at the end. This means we can publish it to our repository and not lose our earlier version. It also means that once published, it's easy to update your code to use the new package. Simply right click on your project and go to Manage NuGet packages, and then click on the "Updates" section. From here you can see what packages have been updated along with it's release notes:

[译]使用NuGet管理共享代码的更多相关文章

  1. 完美解决--用VS中的Git做代码管理器,与他人共享代码

    1.创建代码仓库,这里说一下为什么要创建仓库,Git不能够作为源代码管理器,vs中自带的也只能够在本地进行管理,要和他们共享的话必须要有服务器端去存储代码,类似于SVN,它就有客户端和服务器端,这里推 ...

  2. [资源]--完美解决--用VS中的Git做代码管理器,与他人共享代码

    1.创建代码仓库,这里说一下为什么要创建仓库,Git不能够作为源代码管理器,vs中自带的也只能够在本地进行管理,要和他们共享的话必须要有服务器端去存储代码,类似于SVN,它就有客户端和服务器端,这里推 ...

  3. 【译】在 ASP.NET 和 ASP.NET Core 之间共享代码

    原文 | Ken 翻译 | 郑子铭 随着 .NET 6 的发布,使用 ASP.NET Core 可以获得更多好处.但是将现有代码迁移到 ASP.NET Core 通常听起来像是一项巨大的投资.今天我们 ...

  4. Nuget 命令 NuGet 管理项目库

    因为可视化库程序包管理器的局限性,有很多需要的功能在界面中无法完成. 以下技巧均需要在"程序包管理器控制台"中使用命令来完成. 一.改变项目目标框架后,更新程序包 当改变项目的目标 ...

  5. 使用NuGet管理项目类库引用

    NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2012 ,VS2013中默认集成了N ...

  6. 【转】使用 NuGet 管理项目库-Phil Haack

    原文地址:https://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 无论多么努力,Microsoft 也没办法提供开发人员所需要的每一个库. 虽然 ...

  7. 使用 NuGet 管理项目库

    使用 NuGet 管理项目库 Phil Haack 本文转载自:http://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 无论多么努力,Micros ...

  8. NuGet管理

    使用NuGet管理项目类库引用   NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2 ...

  9. [转载]使用 NuGet 管理项目库

    原文:http://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 无论多么努力,Microsoft 也没办法提供开发人员所需要的每一个库. 虽然 Mi ...

随机推荐

  1. bzoj1047/luogu2216 理想的正方形 (单调队列)

    开b组单调队列,分别维护此时某一列中的最大/最小值 然后我每次把它们的头取出来,塞到维护行的单调队列里,就是n*n的最大/最小值 #include<bits/stdc++.h> #defi ...

  2. poj 3279 Fliptile(二进制搜索)

    Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...

  3. 使用ajax实现前后端是数据交互

    ajax的概念 ajax一个前后台配合的技术,它可以让javascript发送http请求,与后台通信,获取数据和信息.ajax技术的原理是实例化xmlhttp对象,使用此对象与后台通信.jquery ...

  4. 【CF600E】Lomsat gelral

    题目大意:给定一棵 N 个节点的有根树,1 号节点是树的根节点,每个节点有一个颜色.求对于每个节点来说,能够支配整棵子树的颜色之和是多少.支配的定义为对于以 i 为根的子树,该颜色出现的次数不小于任何 ...

  5. 内部git常用总结

    上库git常用命令总结   http://3ms.huawei.com/hi/group/1531/wiki_4955279.html?for_statistic_from=all_group_wik ...

  6. 第三篇-以LinearLayout进行Android界面设计

    一.新建一个项目 选择empty activity,此时项目里面没有main.java的文件. 二.手动创建java文件 Project那儿选择android模式,在app/java/com....一 ...

  7. 【清北学堂2018-刷题冲刺】Contest 4

    Task 1:序列 [问题描述]  小H原本有一个由连续的正整数组成的序列,如{4,5,6}或{10,11,12,13,14,15,16},但是她最近睡眠不足,只能记得其中的一些数字.她想知道,她最少 ...

  8. Python之函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器

    目录 一 函数对象 二 函数的嵌套 三 名称空间和作用域 四 闭合函数 五 装饰器 一.函数对象 1.函数是第一类对象 #第一类对象的特性:# 可以被引用 # 可以当做参数传递 # 返回值是函数 # ...

  9. 序列化serialize与反序列化unserialize

    有利于存储和传递value(除了resource类型外),却不会丢失其原有类型和结构. serialize序列化时会调用魔术方法__sleep(); unserialize反序列化时会调用魔术方法__ ...

  10. 【优秀的设计绘图软件】Affinity Designer Beta for Mac 1.7

        [简介] Affinity Designer 1.7 beta 中文版本,具有全新的UI界面和功能,支持最新的 macOS Mojave 10.14 系统,Affinity Designer是 ...