2011-04-12 191 views
6

是否有一種訪問dll內部的嵌入式資源(css/js/images等)的乾淨方式。嵌入式dll資源

例如,從一個aspx頁面,可以使用類似於下面的東西嗎?

<script type="text/javascript" src="<%= ResolveUrl("~/My.Dll.Namespace.File.js") %>"></script>

回答

4

我建議看看WebResource.axd的以及如何訪問嵌入資源,喜歡的方式,例如這裏:

http://weblogs.asp.net/jeff/archive/2005/07/18/419842.aspx

你可以像這樣得到服務器端的資源url:

Page.ClientScript.GetWebResourceUrl(typeof(MyNameSpaces.MyControl), "MyNameSpaces.Resources.MyImage.gif") 

然後渲染它在頁面上

0

創建資源提供商ASPX頁面女巫將檢查查詢字符串資源名稱。然後從DLL檢索資源,二進制將資源寫入輸出。

然後調用它像這樣:

<script type="text/javascript" 
    src="ResourceProvider.aspx?name=My.Dll.Namespace.File.js"></script> 
3

謝謝我看了一下WebResource,但沒有完全理解它是如何工作的。只是再看一眼&我現在有一個整潔的小解決方案。

對於那些有興趣,我有我的DLL中的類調用資源與靜態方法如下

public static string Get(Page p, string file) { 
    return p.ClientScript.GetWebResourceUrl(typeof(Resource), typeof(Resource).Namespace + ".Resources." + file); 
} 

在我的母版頁(或web.config文件)使用寄存器指令後,現在我可以做以下

<link href="<%= Resource.Get(this.Page, "Styles.reset.css") %>" rel="stylesheet" type="text/css" /> 

(reset.css在DLL駐留在文件夾中稱爲樣式內,因此Styles.filename.css)


注意事項

我發現,通過GetWebResourceUrl的接受第一個參數必須DLL項目內消耗的網站類中的一類。

我也很難確定用於AssemblyInfo.cs文件中的資源的正確的完全限定名。我發現我的程序集名稱與我的默認名稱空間不一樣。應該使用默認名稱空間來形成GetWebResourceUrl的'resourceName'參數。