先看下我的最终的目录结构(这是工程结构就是利用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],如需转载请自行联系原博主。

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

  1. golang打包HTML为Android,使用Go开发Web服务,并打包html/js/css等静态资源文件

    Go的高性能,使它天生适合开发io方面的服务,Web服务当然不再话下.同时,Go编译后生成的单文件不是字节码,而是对应平台的机器码,因此它效率更高.资源占用更低. 为了更好的进程程序管理,移动程序时更 ...

  2. 前端资源文件(图片 css js)同步到阿里云OSS

    前端资源文件(图片 css js)同步到阿里云OSS 需求: 为了实现自动化更新前端资源,前端资源已放到了阿里云OSS,实现自动上传. 思路: 1.因为使用的是php语言开发项目,自然会想到用php实 ...

  3. iOS架构-静态库.framework之资源文件打包bundle(6)

    iOS架构-静态库.framework手动打包及脚本化打包(5)中介绍了.framework的脚本化打包,虽然在iOS架构-静态库.a打包之资源文件打包成bundle(4)中已经演示过,其实是一样的. ...

  4. QT打印窗口、退出、设置字体及颜色、设置时间、控件实现系统函数、添加资源文件(菜单图片)、工具栏添加图片

    打印窗口 #include <QPrintDialog> 退出 QObject::connect(ui->exitAction, SIGNAL(triggerd()), this, ...

  5. 配置 postCSS 自动添加 css 的兼容前缀||打包样式表中的图片和字体文件||打包处理 js 文件中的高级语法

    配置 postCSS 自动添加 css 的兼容前缀 ① 运行 npm i postcss-loader autoprefixer -D 命令 ② 在项目根目录中创建 postcss 的配置文件 pos ...

  6. webpack配置:css文件打包、JS压缩打包和HTML文件发布

    一.CSS文件打包 1.在src下新建css文件,在css文件下新建index.css文件,输入以下代码 body{color:red;font-size:20px; } 2.css建立好后,需要引入 ...

  7. phalcon: 资源文件管 理 引入css,js

    <?phpclass IndexController extends Phalcon\Mvc\Controller {public function index(){//添加本地css资源$th ...

  8. golang将静态资源文件打包进二进制文件

    默认情况下,将项目打包成二进制的时候是不会加入静态资源文件的,因此在部署的时候还需要捎带上这些文件,比如,一些配置文件,图片,样式表等. 很多时候,这些静态文件是不需要变的,如果能一并加入到二进制文件 ...

  9. iOS架构-静态库.a打包之资源文件打包成bundle(4)

    iOS架构-静态库.a的打包及使用(一) iOS架构-静态库.a的脚本化打包及使用(二) 资源文件主要包括:xib.图片以及其他文件资源(json.string等).这里主要介绍 xib.图片.其他的 ...

最新文章

  1. Django的学习需要掌握的一些基础和初步搭建自己的框架
  2. Flex3加载外部数据1
  3. Linux基础知识--进程管理与计划任务
  4. 2021编程语言排行:C#飙升,Python蝉联榜首
  5. java codepointbefore_Java StringBuilder codePointBefore()方法与示例
  6. C++工作笔记-枚举类型的作用
  7. Python练习:星号三角形 I
  8. Lua 教程 | 菜鸟教程
  9. Linux命令解释之cp
  10. python实训报告5000字_20193420 实验一 《Python程序设计》实验一报告
  11. 【每日算法Day 61】LeetCode 672. 灯泡开关 Ⅱ
  12. 100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
  13. 神经网络入门之bp算法,梯度下降
  14. Android混淆配置(含androidx、kotlin)
  15. 树莓派简易快速安装OpenCV4
  16. 征途2经典版服务器双线哪个稳定,《征途2》11月14日全区服务器版本更新公告
  17. 计算机的声卡怎么安装教程,图文详解如何安装声卡驱动_给电脑安装声卡驱动的详细教程...
  18. Ubuntu 误删文件恢复方法
  19. 对java栈的初步认识
  20. WIN10插入耳机没声音,Realtek音频管理器打不开

热门文章

  1. 广州大学校园网路由器傻瓜式自助刷机教程
  2. 响铃:揭底滴滴们跨界营销“真相”,再教你玩一出好戏
  3. 【zer0pts CTF 2022】 Anti-Fermat(p、q生成不当)
  4. 如何让随机出现的列表元素只出现一次 python——求解
  5. 时间与运动-MATHLAB机器人学、机器视觉与控制
  6. MyCat:第八章:MyCAT In Action中文版
  7. 【量化选基】中证500指数增强比300增强好吗?
  8. Android 中编写一个简易购物车,商品包括商品名称,单价,数量,可以对商品进行增删改查功能。(ArrayList,SQLite)
  9. Redis学习之scard命令
  10. XSS注入之xss-labs