日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将js文件打包进dll 方法3

發布時間:2024/8/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将js文件打包进dll 方法3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在編寫 Server Control 的時候難免要用到一些客戶端腳本(javascript),如何把腳本和編譯好的dll一起發布就成了一個問題。把一段一段的javascript block寫在cs文件里是一件很“丑陋”的事情,javascript就應呆在*.js文件里。js文件怎樣才能“打包”到dll里呢?查了很多文檔,最后實踐下來發現有很多細節是需要注意的。整理出來,免得大家走彎路。廢話無多,讓我們開始。

Step 0: 我們已有的
1. 網站項目:Website1 ,其中:??
??????? Default.aspx (空頁面)
2. WebControl庫項目:WebControlLibrary1 ,其中:?
??????? ClientScriptResourceLabel.cs

using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Text;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;

namespace?WebControlLibrary1
{
????
public?class?ClientScriptResourceLabel?:?WebControl
????{

????}
}

??????? script_include.js

function?DoClick()?{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>
????
<Configuration?Condition="?'$(Configuration)'?==?''?">Debug</Configuration>
????
<Platform?Condition="?'$(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)

????public?class?ClientScriptResourceLabel?:?WebControl
????{
????????
protected?override?void?OnPreRender(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>
<head?runat="server">
????
<title>Script?Resource</title>
</head>
<body>
????
<form?id="Form1"?runat="server">
????????
<div>
????????????
<input?type="text"?id="Message">
????????????
<input?type="button"?onclick="DoClick()"?value="ClientClick">
????????????
<cc1:ClientScriptResourceLabel?ID="ClientScriptResourceLabel1"?runat="server"?/>
????????
</div>
????
</form>
</body>
</html>

生成的頁面是這樣的:

<html>
<head><title>
????Script?Resource
</title></head>
<body>
????
<form?name="Form1"?method="post"?action="Default.aspx"?id="Form1">
<div>
<input?type="hidden"?name="__VIEWSTATE"?id="__VIEWSTATE"?value="/wEPDwUKLTkwOTU4NDc0OGRkO0UjKICXV1XisDv/KKM/wA+05FQ="?/>
</div>

<script?src="/WebSite1/WebResource.axd?d=E2u_4K_tSvgEe7jglgaDJYjGQkJj2ZwZEqAWVi3afWYe4CI30IeNjer7_ojoLKjr0&amp;t=632688246616562500"?type="text/javascript"></script>
????????
<div>
????????????
<input?type="text"?id="Message">
????????????
<input?type="button"?onclick="DoClick()"?value="ClientClick">
????????????
<span?id="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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。