问题很简单:如何在asp.net应用程序中使用嵌入式资源?在程序集中包含资源的步骤以及如何引用它?什么是可能遇到的陷阱?在Webresource.axd中使用嵌入式WebResources
回答
花了一天半后,我已经学会了这些:(在VS
嵌入一个需要设置它的生成操作到嵌入的资源资源解决方案资源管理器中右击该文件 - >属性)
next 必须修改AsssemblyInfo.vb以使此资源可用于WebResource查询。将
[Assembly: System.Web.UI.WebResource("MyWebResourceProj.Test.css", "text/css")]
添加到位于项目的MyProject文件夹中的AssemblyInfo.vb。- 该名称由根名称空间/程序集名称+'。'+文件名组成。可以肯定的名称的100%,使用下面的代码片段来关注一下吧:
Dim resNames = Assembly.LoadFile("YourDll.dll").GetManifestResourceNames()
- 需要注意的是,大会的根命名空间必须是一样的大会名称(这个我花了大约4个小时实现。至少在.Net v4的情况下)
- 如果在CSS中有引用(<%= WebResource(“NS.image.jpg”)%>)比传递PerformSubstitution:= true为该CSS的WebResource属性。
- 该名称由根名称空间/程序集名称+'。'+文件名组成。可以肯定的名称的100%,使用下面的代码片段来关注一下吧:
引用的资源可以用
Page.ClientScript.GetWebResourceUrl(GetType(MyWebResourceProj.ConssumingPage), "MyWebResourceProj.Test.css")
- 注意,代替的GetType(类型名)一个可以使用Me.GetType(),但同样,如果类是行不通完成继承,所以要小心!
资源:
通过WebResource.axd的使用嵌入的资源是在颈部疼痛,你可以从你自己的答案见。你必须保持assemblyinfo.vb|cs
的同步,并且看起来几乎不可能在所有正确的位置获得所有名称空间&组件名称。
当你最终得到它的工作,你的奖励是一个包含脚本行,看起来像一个核心内存转储。
我建议一个替代方案。写一个非常简单的web处理程序(例如MyResourceLoader.ashx
),然后在你的类中添加一个方法,它只需要为它自己的嵌入式资源提供服务,无论你认为什么方式有意义,都可以使用反射来获得类,比如WebResource,或者只是硬编码无论你需要什么进入你的装载机,如果它只是为了一个特定的目的。在您的类的公共方法可能如下:
public static Stream GetResource(string resourceName) {
// get the resource from myself, which is easy and doesn't require
// anything in assemblyinfo, and return it as a stream. As a bonus,
// you can parse it dynamically or even return things that aren't
// just embedded, but generated completely in code!
}
或者,如果你决定做更多的东西通用的,你可以得到所有的幻想和使用一个类返回更多的数据,例如
class ResourceInfo
{
public Stream Data;
public string MimeType;
public string FileName;
}
现在,您可以随心所欲地提供您的嵌入式资源,例如,
<script language="javascript" src="/MyResourceLoader.ashx/MyControlScript.js">
我认为微软提出,WebResource业务的一个烂摊子。幸运的是,它非常简单地做你自己的事情。
- 1. 在没有WebResource.axd的情况下提取嵌入式资源
- 2. 在嵌入式Lua中使用cjson C++
- 3. 在嵌入式LinearLayout中使用的onClick
- 4. 在Symfony2中使用嵌入式窗体
- 5. 在嵌入式Tomcat中使用Guice?
- 6. 如何在嵌入式xsd中使用include引用另一个嵌入式xsd?
- 7. 使用嵌入式火鸟
- 8. 使用嵌入式DLL?
- 9. 使用嵌入式JDK
- 10. 嵌入式SQL使用C
- 11. 使用嵌入式资源
- 12. 通过WebResource.axd链接访问的嵌入式资源在生产环境中不起作用
- 13. WebResource.axd在哪里
- 14. 在WPF中使用带有嵌入式UserControl的INotifyDataErrorInfo(使用Caliburn.Micro)
- 15. 在SQL Server 2008中使用表达式的嵌入式CASE
- 16. 在FlowDocument中启用嵌入式控件
- 17. 如何在嵌入式Python中使用QT应用程序
- 18. 如何在Excel VBA中使用Word.Documents.Add()中的嵌入式dotx?
- 19. Neo4j其余调用使用Java(不在嵌入式模式)
- 20. 使用Rails将嵌入式文档嵌入到MongoDB rake db:seed
- 21. 使用嵌入式资源将dll嵌入HttpHandler
- 22. 如何将嵌入式文档放入嵌入式文档中?
- 23. 嵌入式Scala和嵌入式Groovy
- 24. Power BI嵌入式 - 嵌入式瓷砖
- 25. Maven webResources即时过滤
- 26. 从babel混淆排除webresources?
- 27. 使用嵌入式解析<和>
- 28. XML:无法使用嵌入式XSLT
- 29. 使用Django的嵌入式ActiveX模拟
- 30. 如何使用嵌入式API
但是MS方法更安全。 – jaraics 2011-04-22 05:56:55
为什么MS方法更安全?你认为这种方法存在什么样的安全风险? – 2011-04-22 11:52:37
通过此解决方案,程序集中嵌入的所有资源都是可请求的,另一种方法可以仅标记一些可访问的资源 – jaraics 2011-04-24 10:53:51