有时,精通 J2EE 的人看着 ASP.NET 并想知道,将应用程序部署为单个单元的支持在哪里?JSP/Servlet 应用程序可以部署为 WAR 文件,所有页面、内容、元数据和代码都在一个存档中。战争文件可以进行版本控制,轻松移动。可以保证整个应用程序包含在一个单元中。
这不是 ASP.NET 的主流方法。人们做什么?他们是否求助于复制目录和所有无数文件?这对 ASP.NET 开发人员来说不是问题吗?
(这有点作弊,因为我会建议我自己的答案)
有时,精通 J2EE 的人看着 ASP.NET 并想知道,将应用程序部署为单个单元的支持在哪里?JSP/Servlet 应用程序可以部署为 WAR 文件,所有页面、内容、元数据和代码都在一个存档中。战争文件可以进行版本控制,轻松移动。可以保证整个应用程序包含在一个单元中。
这不是 ASP.NET 的主流方法。人们做什么?他们是否求助于复制目录和所有无数文件?这对 ASP.NET 开发人员来说不是问题吗?
(这有点作弊,因为我会建议我自己的答案)
虽然不是 ASP.NET 中的主流方法,但这是非常可能的,使用称为VirtualPathProvider
for ASP.NET 的构造。有了它,您可以从非文件系统的东西中提供网站内容。例如,您可以直接使用 ZIP 文件为 ASP.NET 网站提供服务,而无需先将文件解压缩到磁盘。
这是一个演示或说明概念的下载,它使用 DotNetZip 库来帮助 ASP.NET 从 zip 中提取内容。
有趣的代码位:
using Ionic.Zip;
namespace Ionic.Zip.Web.VirtualPathProvider
{
public class ZipFileVirtualPathProvider : System.Web.Hosting.VirtualPathProvider
{
ZipFile _zipFile;
public ZipFileVirtualPathProvider (string zipFilename)
: base () {
_zipFile = ZipFile.Read(zipFilename);
}
~ZipFileVirtualPathProvider () {
_zipFile.Dispose ();
}
public override bool FileExists (string virtualPath)
{
string zipPath = Util.ConvertVirtualPathToZipPath (virtualPath, true);
ZipEntry zipEntry = _zipFile[zipPath];
if (zipEntry != null)
{
return !zipEntry.IsDirectory;
}
else
{
// Here you may want to return Previous.FileExists(virtualPath) instead of false
// if you want to give the previously registered provider a process to serve the file
return false;
}
}
public override bool DirectoryExists (string virtualDir)
{
string zipPath = Util.ConvertVirtualPathToZipPath (virtualDir, false);
ZipEntry zipEntry = _zipFile[zipPath];
if (zipEntry != null)
{
return zipEntry.IsDirectory;
}
else
{
// Here you may want to return Previous.DirectoryExists(virtualDir) instead of false
// if you want to give the previously registered provider a chance to process the directory
return false;
}
}
public override VirtualFile GetFile (string virtualPath) {
return new ZipVirtualFile (virtualPath, _zipFile);
}
public override VirtualDirectory GetDirectory (string virtualDir)
{
return new ZipVirtualDirectory (virtualDir, _zipFile);
}
public override string GetFileHash(string virtualPath, System.Collections.IEnumerable virtualPathDependencies)
{
return null;
}
public override System.Web.Caching.CacheDependency GetCacheDependency(String virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
{
return null;
}
}
}
VPP 构造适用于 ASP.NET 2.0 或更高版本,适用于任何网站。您当然可以调整这个想法以从数据库、CMS 或...中获取内容??