在软件开发中,将代码打包并发布到中央仓库,供其他开发者使用,是一种非常高效的做法。本文将介绍如何创建一个MVCHtmlHelper,并将其打包为NuGet包,最后发布到NuGet.org,供其他开发者使用。
将创建一个强大的MVCHtmlHelper,了解如何将其打包为NuGet包,并最终发布,以便任何人都可以使用它。本文不关注助手的开发,而是围绕创建NuGet包所需的步骤进行讨论。
助手是围绕CKEditor的内联编辑功能构建的,它为更改的内容提供持久性。默认设置在查询字符串中附加"?editablemvc=true"时启用所见即所得工具栏,通过编辑元素的内容保存到文件库。存储库和授权可以在EditableMvcBootstrap类中更改。
NuGet允许通过转换文件对配置文件进行更改,并允许添加/删除源代码文件。这意味着可以轻松地向项目中添加一个新类,但无法编辑一个现有的类,如global.asax.cs。WebActivator包克服了这个限制,允许在单独的文件中轻松地连接到主应用程序事件。在这种情况下,希望在Application_Start的开始和结束时分别添加助手的设置和js文件的注册:
C#
[assembly: WebActivatorEx.PreApplicationStartMethod(
typeof(EditableMvc.Web.EditableMvcBootstrap),
"Start")]
[assembly: WebActivatorEx.PostApplicationStartMethod(
typeof(EditableMvc.Web.EditableMvcBootstrap),
"PostStart")]
namespace EditableMvc.Web
{
public static class EditableMvcBootstrap
{
public static void Start()
{
// 注册一个自定义存储库,通过实现IEditableRepository
EditableMvcConfig.RegisterRepository = () =>
new SimpleFileRepository("~/App_Data");
// 注册用于启用/禁用HTML元素编辑的授权方法
EditableMvcConfig.RegisterAuthorization = () =>
{
var editable = !string.IsNullOrEmpty(
HttpContext.Current.Request.QueryString["editablemvc"]);
if (editable)
{
return Convert.ToBoolean(
HttpContext.Current.Request.QueryString["editablemvc"]);
}
return false;
};
}
// 在App_Start执行后注册捆绑包
public static void PostStart()
{
BundleTable.Bundles.Add(
new ScriptBundle("~/bundles/editableMvc").Include(
"~/Scripts/jquery-ui-{version}.js",
"~/Scripts/ckeditor/ckeditor.js",
"~/Scripts/ckeditor/plugins/editablemvcsave/editablemvcsave.js",
"~/Scripts/editablemvc.js"));
}
}
}
创建一个空的类库,并用所需的NuGet名称命名。如果有任何编译文件,项目的DLL需要包含在包中。不想编译MVC项目默认的文件(如路由、控制器等),所以选择使用空的类库作为NuGet包的目标。所需的文件将从包含工作助手的MVC项目复制到类库。
让将想要部署到用户项目的文件添加到类库中。请注意,引导类在App_Start文件夹中:如果目标项目中不存在此文件夹,NuGet将创建该文件夹,如果找到了,它将仅将文件添加到现有文件夹中。
虽然不允许覆盖或删除现有文件,但可以转换正在部署的文件:将源文件的文件扩展名从.cs更改为.cs.pp,并开始使用任何项目属性来更改文件的输出。然后可以使用以下方式更改命名空间:
C++
namespace $rootnamespace$.Controllers {}
虽然可以使用Package Manager Console创建包,但拥有一个GUI会更有帮助,所以让下载Nuget Package Explorer。类似于创建MSI包,该工具允许将可部署资源拖放到content文件夹中,并将所需的依赖项(如项目DLL,如果需要的话)拖放到lib文件夹中。
其他依赖项,如外部包或.NET程序集,可以通过编辑包元数据来添加:
XML
关于包的信息包含在一个manifest文件*.nuspec中,并在发布过程中使用,以识别(连同库名称、作者等信息)程序集的版本。不允许覆盖现有版本的库,这是为了避免破坏使用该版本的代码,但只能发布程序集的新版本。