是否有一种干净的方式来访问dll内的嵌入式资源(css/js/images等)
例如,在aspx页面中,可以使用类似于下面的内容吗? <script type="text/javascript" src="<%= ResolveUrl("~/My.Dll.Namespace.File.js") %>"></script>
我建议看一下WebResource。axd以及如何访问嵌入式资源,例如:
http://weblogs.asp.net/jeff/archive/2005/07/18/419842.aspx你可以像这样获得服务器端的资源url:
Page.ClientScript.GetWebResourceUrl(typeof(MyNameSpaces.MyControl), "MyNameSpaces.Resources.MyImage.gif")
,然后渲染到页面
谢谢,我之前看了一下WebResource,但没有完全理解它是如何工作的。只是再看了一眼& &;我现在有了一个整洁的小解决方案。
对于那些感兴趣的人,我在我的dll中有一个名为Resource的类,其静态方法如下
public static string Get(Page p, string file) {
return p.ClientScript.GetWebResourceUrl(typeof(Resource), typeof(Resource).Namespace + ".Resources." + file);
}
在我的主页(或web.config)中使用register指令后,我现在可以做以下操作
<link href="<%= Resource.Get(this.Page, "Styles.reset.css") %>" rel="stylesheet" type="text/css" />
(reset.css位于dll中名为Styles的文件夹中,因此是Styles.filename.css)
重要提示:
我发现GetWebResourceUrl接受的第一个参数必须是dll项目中的类,而不是消费网站中的类。
在确定AssemblyInfo.cs文件中的资源使用的正确的完全限定名时,我也遇到了巨大的困难。我发现我的程序集名称与默认名称空间不相同。默认的命名空间应该用来形成GetWebResourceUrl的'resourceName'参数。
创建一个资源提供者Aspx页面,它将检查查询字符串中的资源名称。然后从DLL中检索资源,并在输出中二进制写入资源。
然后像这样调用它:
<script type="text/javascript"
src="ResourceProvider.aspx?name=My.Dll.Namespace.File.js"></script>