2011-04-12 170 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'参数。