仅在需要时嵌入

分享于 

6分钟阅读

Web开发

  繁體 雙語

在继续播放和合并最佳的ASP.NET 控件和基于jQuery的UI时,我决定创建一个 embedded-resource-only DLL。

这个DLL应该包含所有的JavaScript文件作为嵌入的资源,以适当的机制从整个应用程序( 包括依赖项和重复项) 中加载它们。

很明显,随着我放入到DLL中的JavaScript数量的增加,在部署时必须缩小。

简单。我在每个文件和voilà中添加了'googleclosurecompiler'自定义工具 ! 我有 !

所以现在我同样的项目和简化版本的代码,所以我添加一些条件,加载正确的。

像这样:

using System;using System.Web;using System.Web.UI;#if DEBUG[assembly: WebResource( "jquery.js", "text/javascript" )]
[assembly: WebResource( "kendo.core.js", "text/javascript" )]#else[assembly: WebResource( "jquery.min.js", "text/javascript" )]
[assembly: WebResource( "kendo.core.min.js", "text/javascript" )]#endifnamespace Utils
{
 publicclass JavaScript
 {
 privatestaticint _IncludeID = 0;
 privatestaticint _ScriptPath = 1;
 privatestaticstring _Script = 
 "<script javascript="javascript" src="" text="text" type=""></script>";#if DEBUGprivatestatic string[ ] _jQuery = { "jQueryScriptInclude", "jquery.js" };
 privatestatic string[ ] _Core = { "CoreScriptInclude", "kendo.core.js" };#elseprivatestatic string[ ] _jQuery = { "jQueryScriptInclude", "jquery.min.js" };
 privatestatic string[ ] _Core = { "CoreScriptInclude", "kendo.core.min.js" };#endifpublicstaticvoid Add ( Page Page, Type Type, string ID, string Name )
 {
 if (!Page.ClientScript.IsStartupScriptRegistered( Type, ID ) )
 {
 Page.ClientScript.RegisterStartupScript( 
 Type, 
 ID, 
 string.Format( 
 _Script, 
 HttpUtility.HtmlEncode( Page.ClientScript.GetWebResourceUrl( Type, Name ) ) 
 ), 
 false 
 );
 }
 }
 }
}

看起来不错,不是事件更好? ! 它有效加载正确的JavaScript文件。

所以怎么了?

和minified文件都嵌入到DLL的调试版本和发布版本中

事实上当我开始考虑它的时候发现。 没有人告诉编译器应该根据某些条件包含这些文件。 经过一些搜索我发现显然没有办法 !

有,不舒服,不舒服,没有用户界面,但是。

你必须编辑项目文件。 将文件移动到不同的ItemGroup 并添加适当的条件。

最初,Visual Studio 像这样创建 ItemGroup:

<itemgroup><embeddedresourceinclude="jsjquery.js"><generator>GoogleClosureCompiler</generator><lastgenoutput>jquery.min.js</lastgenoutput></embeddedresource><embeddedresourceinclude="jsjquery.min.js"><autogen>True</autogen><designtime>True</designtime><dependentupon>jquery.js</dependentupon></embeddedresource><embeddedresourceinclude="jskendo.core.js"><generator>GoogleClosureCompiler</generator><lastgenoutput>kendo.core.min.js</lastgenoutput></embeddedresource><embeddedresourceinclude="jskendo.core.min.js"><autogen>True</autogen><designtime>True</designtime><dependentupon>kendo.core.js</dependentupon></embeddedresource></itemgroup>

所有你必须做的就是把简单的和简化的文件分成不同的ItemGroup,比添加一些条件。

<itemgroupcondition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"><embeddedresourceinclude="jsjquery.js"><generator>GoogleClosureCompiler</generator><lastgenoutput>jquery.min.js</lastgenoutput></embeddedresource><embeddedresourceinclude="jskendo.core.js"><generator>GoogleClosureCompiler</generator><lastgenoutput>kendo.core.min.js</lastgenoutput></embeddedresource></itemgroup><itemgroupcondition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU'"><embeddedresourceinclude="jsjquery.min.js"><autogen>True</autogen><designtime>True</designtime><dependentupon>jquery.js</dependentupon></embeddedresource><embeddedresourceinclude="jskendo.core.min.js"><autogen>True</autogen><designtime>True</designtime><dependentupon>kendo.core.js</dependentupon></embeddedresource></itemgroup>

一定要手工做不太优雅,但也有很好的事情。

Visual Studio 将保留你创建的ItemGroup定义,只要你不删除原始文件。 根据我们的扩展量,确保某人已经工作了( 已经完成),这个小东西可以处理这个小东西。


相关文章