C# DLL资源文件打包(图片、JS、CSS)[WebResource]

简介:

先看下我的最终的目录结构(这是工程结构就是利用WebResource.axd通过一个URL来访问装配件的内置资源(译) 英文原站下载的代码):
    
    这里需要说明几点:
    1.    对于以下这行资源注册代码放在AssemblyInfo.cs中和放在DLL中任何类的namespace前效果是一样的。(我个人建议统一放在AssemblyInfo.cs中便于统一管理)

[assembly: WebResource( " FunkyTextBox.Resources.test.jpg " " image/jpeg " )]

    2.    资源文件在DLL中的位置和访问是有关系的!!我把图上test.jpg放在根目录和放在Resources目录下访问起来是不一样的,注册资源的时候就是根据这个来(也就是说如果放在根目录的话注册资源的名称就是"FunkyTextBox.test.jpg")。

    现在我们先分析FunkyTextBox他原来的代码架构,也是很多网上示例的架构:
    1.    把资源文件拷贝到项目中
    2.    编写自己的用户控件,继承WebControl如TextBox,也就是说在DLL内部调用资源文件
    3.    在用户控件中注册资源(也可以在AssemblyInfo.cs中)
    基本上看到的都是在DLL内部调用资源文件然后再从外部引用该自定义控件。这里我主要讨论的是想在外部直接引用DLL内部的资源文件,相信很多朋友和我一样,把DLL内部引用资源文件的代码复制出来拷贝到ASPX里面图片怎么都出不来,包括注册httphandles里面截获WebResource.axd也不管用。直到在MSDN上看到那段代码才有所感悟:

using  System;
using  System.Web;
using  System.Web.UI;
using  System.Security.Permissions;

[assembly: WebResource(
" Samples.AspNet.CS.Controls.script_include.js " " application/x-javascript " )]
namespace  Samples.AspNet.CS.Controls
{
    [AspNetHostingPermission(SecurityAction.Demand, Level 
=  AspNetHostingPermissionLevel.Minimal)]
    
public   class  ClientScriptResourceLabel
    {
        
//  Class code goes here.

    }
     
}
<% @ Page Language = " C# " %>
<% @ Import Namespace = " Samples.AspNet.CS.Controls "   %>

<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "
    
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< script runat = " server " >

  
public   void  Page_Load(Object sender, EventArgs e)
  {
    
//  Define the resource name and type.
    String rsname  =   " Samples.AspNet.CS.Controls.script_include.js " ;
    Type rstype 
=   typeof (ClientScriptResourceLabel);

    
//  Get a ClientScriptManager reference from the Page class.
    ClientScriptManager cs  =  Page.ClientScript;

    
//  Write out the web resource url.
    ResourcePath.InnerHtml  =  cs.GetWebResourceUrl(rstype, rsname);

    
//  Register the client resource with the page.
    cs.RegisterClientScriptResource(rstype, rsname);

  }
</ script >
< html   >
  
< head >
    
< title > ClientScriptManager Example </ title >
  
</ head >
  
< body >
     
< form id = " Form1 "  runat = " server " >
     The web resource path 
is  
     
< span  id = " ResourcePath "  runat = " server " /> .
     
< br  />< br  />
     
< input type = " text "  id = " Message "   />      
     
< input type = " button "  onclick = " DoClick() "  value = " ClientClick "   />
     
</ form >
  
</ body >
</ html >

为了方便直接看到效果,我把上面从DLL中读取JS的代码改成了从DLL中读取图片的代码,改动如下
1.    将ClientScriptResourceLabel命名空间改为FunkyTextBox
2.    将资源注册代码改成如下(注意资源路径):

[assembly: WebResource( " FunkyTextBox.Resources.test.jpg " " image/jpeg " )]

3.    为ASPX页面添加一个图片按钮并把读取的相应改成如下:

< script runat = " server " >
    
public   void  Page_Load(Object sender, EventArgs e)
      {
        
//  Define the resource name and type.
        String rsname  =   " FunkyTextBox.Resources.test.jpg " ;
        Type rstype 
=   typeof (ClientScriptResourceLabel);

        
//  Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs  =  Page.ClientScript;

        
//  Write out the web resource url.
        imgpath.Src  =  cs.GetWebResourceUrl(rstype, rsname);
        
// ResourcePath.InnerHtml =

        
//  Register the client resource with the page.
        
// cs.RegisterClientScriptResource(rstype, rsname);
      }
</ script >

< html xmlns = " http://www.w3.org/1999/xhtml "   >
< head runat = " server " >
    
< title > WebResources </ title >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< div >
    
< img runat = " server "  id = " imgpath "  alt = "" />
    上面访问代码可以简化如下:
mgpath.Src  =  ClientScript.GetWebResourceUrl( typeof (FunkyTextBox),  " FunkyTextBox.Resources.test.jpg " );

    由上面的代码我们可以看得出,ClientScriptResourceLabel类里面是空的,唯一有用的就是注册了一下资源,接下来我们把ClientScriptResourceLabel里面的资源注释掉,把资源注册到AssemblyInfo.cs中,也能够正确显示。这就让我纳闷了!type指向的是一个空的类也能够显示资源,但是我用this.GetType()或用typeof(_Default)通通都不行!!我猜想这个GetWebResourceUrl第一个参数只需要我们把他指引向正确的DLL空间就行了,然后就可以找到资源了!?还有我用Assembly.Load("FunkyTextBox").GetType()来指定Type也是不行的,感觉还是学得比较浅:)
    现在基本能达到我的直接访问内部资源文件的要求了,只是需要多一个空类来指定type,暂时满足我的要求,目前可以考虑把JS放到这个里面来,这样一来如果拷贝生成JS的SRC链接直接访问可是不行的哦!就到这里,欢迎多多交流!

补充——代码下载[2008-9-24]:

     当时写的Demo,是在别人的源码基础上改的:http://files.cnblogs.com/over140/FunkyTextBox.rar

本文转自博客园农民伯伯的博客,原文链接:C# DLL资源文件打包(图片、JS、CSS)[WebResource],如需转载请自行联系原博主。

目录
相关文章
|
26天前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
14天前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
4天前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
4天前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
32 1
|
9天前
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
20 3
|
14天前
|
前端开发 JavaScript UED
如何使用 JavaScript 动态修改 CSS 变量的值?
【10月更文挑战第28天】使用JavaScript动态修改CSS变量的值可以为页面带来更丰富的交互效果和动态样式变化,根据不同的应用场景和需求,可以选择合适的方法来实现CSS变量的动态修改,从而提高页面的灵活性和用户体验。
|
20天前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
72 6
|
6月前
|
前端开发 JavaScript UED
前端开发的魔法:CSS动画与JavaScript的完美结合
本文将探讨如何利用CSS动画和JavaScript的结合,为前端页面增添生动的效果。我们将通过实例展示如何使用这两种技术为网页元素创建吸引人的动画效果,并讨论它们的优缺点和适用场景。
101 0
|
Web App开发 编解码 前端开发
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
147 0
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
|
Web App开发 移动开发 前端开发
梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能。
梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画

热门文章

最新文章