千家信息网

ASP.NET虚拟文件系统的作用

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要讲解了"ASP.NET虚拟文件系统的作用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"ASP.NET虚拟文件系统的作用"吧!具体实现步骤如
千家信息网最后更新 2025年02月05日ASP.NET虚拟文件系统的作用

这篇文章主要讲解了"ASP.NET虚拟文件系统的作用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"ASP.NET虚拟文件系统的作用"吧!

具体实现步骤如下:

一、开发web用户控件

这一步和以前的开发没有区别。
1、首先新建一个web应用程序(需要VS2005 sp1支持)
2、然后在里面开发几个web用户控件
3、在ascx文件上右键-〉属性-〉生成操作选择嵌入的资源
4、生成dll就可以了(dll的名字为:Test.Control.dll,后面会用到)

二、开发一个虚拟文件系统提供类

这一步是最重要的一步。

具体思路就是:在系统中注册这个类,然后在每访问一个文件/资源的时候会自动调用这个类,在这个类中判断文件的路径是否是我们定义的,如果是就用我们的逻辑来处理,即从dll中取出资源。

首先把类的代码贴出来,我想可能许多人应该和我一样,喜欢直接先看代码:

  1. DllVirtualPathProvider

  2. public class DllVirtualPathProvider : System.Web.Hosting.VirtualPathProvider

  3. {

  4. public DllVirtualPathProvider()

  5. {

  6. }

  7. public override string CombineVirtualPaths(string basePath, string relativePath)

  8. {

  9. if (IsAppResourcePath(basePath))

  10. {

  11. return null;

  12. }

  13. return Previous.CombineVirtualPaths(basePath, relativePath);

  14. }

  15. public override System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)

  16. {

  17. return Previous.CreateObjRef(requestedType);

  18. }

  19. public override bool DirectoryExists(string virtualDir)

  20. {

  21. if (IsAppResourcePath(virtualDir))

  22. {

  23. return true;

  24. }

  25. else

  26. {

  27. return Previous.DirectoryExists(virtualDir);

  28. }

  29. }

  30. public override string GetCacheKey(string virtualPath)

  31. {

  32. if (IsAppResourcePath(virtualPath))

  33. {

  34. return null;

  35. }

  36. else

  37. {

  38. return Previous.GetCacheKey(virtualPath);

  39. }

  40. }

  41. public override string GetFileHash(string virtualPath,
    IEnumerable virtualPathDependencies)

  42. {

  43. if (IsAppResourcePath(virtualPath))

  44. {

  45. return null;

  46. }

  47. else

  48. {

  49. return Previous.GetFileHash(virtualPath, virtualPathDependencies);

  50. }

  51. }

  52. private bool IsAppResourcePath(string virtualPath)

  53. {

  54. String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);

  55. return checkPath.StartsWith("~/MyUserControl/Test.Control.dll/",
    StringComparison.InvariantCultureIgnoreCase);

  56. }

  57. public override bool FileExists(string virtualPath)

  58. {

  59. return (IsAppResourcePath(virtualPath) || Previous.FileExists(virtualPath));

  60. }

  61. public override VirtualFile GetFile(string virtualPath)

  62. {

  63. if (IsAppResourcePath(virtualPath))

  64. {

  65. return new AssemblyResourceVirtualFile(virtualPath);

  66. }

  67. else

  68. {

  69. return Previous.GetFile(virtualPath);

  70. }

  71. }

  72. public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath,

  73. System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)

  74. {

  75. if (IsAppResourcePath(virtualPath))

  76. {

  77. string path = HttpRuntime.AppDomainAppPath + virtualPath.Substring(1);

  78. return new System.Web.Caching.CacheDependency(path);

  79. }

  80. else

  81. {

  82. return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);

  83. }

  84. }

  85. }

感谢各位的阅读,以上就是"ASP.NET虚拟文件系统的作用"的内容了,经过本文的学习后,相信大家对ASP.NET虚拟文件系统的作用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0