问题很简单:如何在asp.net应用程序中使用嵌入式资源?在程序集中包含资源以及如何引用它的步骤是什么?可能遇到的问题是什么?
答案 0 :(得分:5)
在花了半天的时间后,我学会了这些:
要嵌入资源,需要将构建操作设置为嵌入式资源(在VS解决方案资源管理器中右键单击文件 - >属性)
必须修改 AsssemblyInfo.vb 以使此资源可用于WebResource查询。将[Assembly: System.Web.UI.WebResource("MyWebResourceProj.Test.css", "text/css")]
添加到位于项目的MyProject文件夹中的AssemblyInfo.vb。
Dim resNames = Assembly.LoadFile("YourDll.dll").GetManifestResourceNames()
可以使用Page.ClientScript.GetWebResourceUrl(GetType(MyWebResourceProj.ConssumingPage), "MyWebResourceProj.Test.css")
资源:
答案 1 :(得分:1)
通过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">
我认为MS弄乱了WebResource业务。幸运的是,它“非常直接做你自己的事情。”