我们在编写 Server Control 的时候难免要用到一些客户端脚本(javascript),如何把脚本和编译好的dll一起发布就成了一个问题。把一段一段的javascript block写在cs文件里是一件很“丑陋”的事情,javascript就应呆在*.js文件里。js文件怎样才能“打包”到dll里呢?查了很多文档,最后实践下来发现有很多细节是需要注意的。整理出来,免得大家走弯路。废话无多,让我们开始。

Step 0: 我们已有的
1. 网站项目:Website1 ,其中:  
        Default.aspx (空页面)
2. WebControl库项目:WebControlLibrary1 ,其中: 
        ClientScriptResourceLabel.cs

usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Text; usingSystem.Web; usingSystem.Web.UI; usingSystem.Web.UI.WebControls; namespaceWebControlLibrary1
{
publicclassClientScriptResourceLabel : WebControl
    {

}
}

script_include.js

functionDoClick() {Form1.Message.value='Text from resource script.'}


Step 1:
在script_include.js文件的属性窗口里,把Build Action改为:Embedded Resource


Step 2:

ClientScriptResourceLabel.cs 中加入

[assembly: WebResource("script_include.js","application/x-javascript")]namespace WebControlLibrary1
{
....

注意这句是在namespace之外。你也可以把这句加在AssemblyInfo.cs文件里,.NET的类库就是统一加在AssemblyInfo.cs文件里的。

很多文档(包括MSDN)里都说通过以上两步就可以把js文件作为资源,捆绑到dll中了。但实际上更不就不能用。我们用Reflector来看看编译出来的到底是什么东东。

怎么变成 WebControlLibrary1.script_include.js 了?!问题是出在“默认名称空间”。VS会自动把default namespace加到资源文件前面。其实只要把默认名称空间该为空就可以了。令人郁闷的是VS2005正式版不允许把default namespace改为空(beta2是允许的)。怎么办呢?难道要用麻烦的命令行来编译吗?还有一个办法就是手工修改项目文件。

Step 3:
用写字板打开WebControlLibrary1.csproj文件,把其中的RootNamespace 改为空

<PropertyGroup> <ConfigurationCondition=" '$(Configuration)' == '' ">Debug</Configuration> <PlatformCondition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion>8.0.50727</ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{65431F13-ABAE-4281-A860-90FEC739AFED}</ProjectGuid> <OutputType>Library</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace></RootNamespace> 
<AssemblyName>WebControlLibrary1.web</AssemblyName> </PropertyGroup>

这样一来“默认名称空间”就没有了:

Step 4:
编译WebControlLibrary1,这下得到的是我们想要的了:


Step 5
: 
调用脚本资源(ClientScriptResourceLable.cs)

publicclassClientScriptResourceLabel : WebControl
    {
protectedoverridevoidOnPreRender(EventArgs e)
        {
if(this.Page!=null)
            {
                ClientScriptManager manager1
=this.Page.ClientScript;
                manager1.RegisterClientScriptResource(
typeof(ClientScriptResourceLabel),"script_include.js");
            }
base.OnPreRender(e);
        }
    }

Step 6
终于可以在页面里使用包装好的控件了(Default.aspx):

<%@ Page Language="C#"%> <%@ Register Assembly="WebControlLibrary1"Namespace="WebControlLibrary1"TagPrefix="cc1"%> <html> <headrunat="server"> <title>Script Resource</title> </head> <body> <formid="Form1"runat="server"> <div> <inputtype="text"id="Message"> <inputtype="button"onclick="DoClick()"value="ClientClick"> <cc1:ClientScriptResourceLabelID="ClientScriptResourceLabel1"runat="server"/> </div> </form> </body> </html>

生成的页面是这样的:

<html><head><title>Script Resource</title></head><body><formname="Form1"method="post"action="Default.aspx"id="Form1"><div><inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUKLTkwOTU4NDc0OGRkO0UjKICXV1XisDv/KKM/wA+05FQ="/></div><scriptsrc="/WebSite1/WebResource.axd?d=E2u_4K_tSvgEe7jglgaDJYjGQkJj2ZwZEqAWVi3afWYe4CI30IeNjer7_ojoLKjr0&amp;t=632688246616562500"type="text/javascript"></script><div><inputtype="text"id="Message"><inputtype="button"onclick="DoClick()"value="ClientClick"><spanid="ClientScriptResourceLabel1"></span></div></form></body></html>

其中的<script src="/WebSite1/WebResource.axd?d=...... 就是对脚本资源的调用。

注意:除了default namespace会影响编译出来的脚本资源文件名外,文件所在的位置也会作为前缀加到文件名上。例如你把script_include.js放到 JS 目录下,编译出来就会变成 JS.scritp_include.js

转载于:https://www.cnblogs.com/Nina-piaoye/archive/2013/03/07/2947875.html

将js文件打包进dll 方法3相关推荐

  1. [转]Asp.net 将js文件打包进dll 方法

    Asp.net 将js文件打包进dll 方法 注:本文基于.NET 2.0 和 VS2005 我们在编写 Server Control 的时候难免要用到一些客户端脚本(javascript),如何把脚 ...

  2. 将xml文件打包进dll(或exe)

    经常,为了安全,我们需要将xml文件加密或者打包进dll文件中,那么如何将xml文件打包进dll中呢?在.net中,为我们提供了很好的方式: 选中该xml文件,将其属性中的"生成操作&quo ...

  3. Vue导入TradingView(无charting_library.min.js文件的包导入方法)

    Vue导入TradingView(无charting_library.min.js文件的包导入方法) 你申请到的包很可能不是有charting_library.min.js文件的那个版本,而是char ...

  4. AutoJs4.1.0实战教程---js文件打包发布成APK文件

    AutoJs4.1.0实战教程---js文件打包发布 首先需要在手机上安装AutojsApp,下载地址:https://wwa.lanzoui.com/imX3Vpchkdc 需要将Js文件打包发布成 ...

  5. 对vue项目js文件打包时进行混淆加密

    对vue项目js文件打包时进行混淆加密 环境 vue 3 vue cli 4 webpack 4.0.0 https://www.cnblogs.com/dragonir/p/14445767.htm ...

  6. Qt for Android / ios 将图片或文件打包进安装包中

    概述 用 Qt 做程序开发,图片或翻译文件的引用有两种方式,一种是直接引用,本地图片, 一种是编译到资源文件中,其实直接添加在资源文件中是最方便的,不需要考虑文件存放的问题,但是这样可能带来的问题是启 ...

  7. Magento中调用JS文件的几种方法

    一.全局调用方法: 通过该方法每个页面都会引用这个JS文件,除非是类似jQuery这样的系统文件,不然不推荐这种方法. 文件路径:/app/design/frontend/default/Your_T ...

  8. linux命令封装sh,shell脚本学习之调用脚本将文件打包zip的方法示例

    前言 本文主要给大家介绍的是关于调用脚本将文件打包zip的相关资料,分享出来供大家参考学习,下面来一起看看详细的介绍: 最近刚刚接触shell脚本,写了一点简单的练手.这里是用python调用脚本执行 ...

  9. 前端vue2项目引入第三方js文件或者远程js文件并执行相应方法

    啥也不多说,直接上结论 新建一个目录和文件例如: ./tools/load.js //引入远程js,加载完成后执行相应方法 function loadJs(src) {return new Promi ...

最新文章

  1. 心急的C小加《贪心》
  2. 购物车的实现 ajax
  3. 用计算机进行资料检索工作是,用计算机进行资料检索工作是属于计算机应用中的什么...
  4. 51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
  5. linux 无线网卡驱动桥转发,引用和完美转发
  6. 读取Android系统的多媒体库
  7. sql两个时间之间的小时差_2年级学生每天上学路上有两个小时车程,该如何利用好这个时间?-知乎亲子热点快报/2020/09/04...
  8. batchplot插件用法_Batchplot怎么安装及使用?Batchplot的安装方法及使用方法介绍
  9. html怎么根据控IE制台找错误,IE调试网页之三:控制台查看错误和状态
  10. scala unix时间戳_下载,在Linux,Unix,Windows上安装Scala
  11. python构建带数字的古诗词数据集
  12. 计算机网络按拓扑结构可以划分为,计算机网络按拓扑结构分为哪些
  13. 我自己在学arm7——ourdev
  14. 时钟同步显示屏(NTP时间显示屏)子母钟系统介绍
  15. 猫眼电影票房爬取到MySQL中_Scrapy爬取猫眼电影并存入MongoDB数据库
  16. 手把手教如何用Linux下IIO设备(附代码)
  17. 重量级锁 synchronized
  18. LS1046:挂载根文件系统
  19. 人工智能浪潮中,AI如何为企业降本增效?
  20. 前端axios下载excel文件(二进制)的处理方法

热门文章

  1. 武汉 net 2011-04-29
  2. .NET中的文件IO操作实例
  3. nginx同时支持asp.net与php
  4. java线索二叉树的实现_JAVA递归实现线索化二叉树
  5. android studio tree,Git 、Sourse Tree 和 Android Studio配置遇到的问题
  6. java list想加_利用java List 实现多项式相加,相乘
  7. 大咖白话 Serverless 训练营,限时报名开启!
  8. 智能搜索推荐一体化营收增长解决方案
  9. Spring启动慢?提速利器SpringFu来了
  10. 首次揭秘云原生Hologres存储引擎