Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能得到“吗?”;“战争档案”;是否使用ASP.NET键入部署?_.net_Asp.net_Deployment_Archive - Fatal编程技术网

我能得到“吗?”;“战争档案”;是否使用ASP.NET键入部署?

我能得到“吗?”;“战争档案”;是否使用ASP.NET键入部署?,.net,asp.net,deployment,archive,.net,Asp.net,Deployment,Archive,有时,精通J2EE的人看到ASP.NET时会想,作为单个单元部署应用程序的支持在哪里?JSP/Servlet应用程序可以作为WAR文件进行部署,所有页面、内容、元数据和代码都在该归档文件中。war文件可以进行版本控制,很容易移动。可以保证整个应用程序都包含在一个单元中 这不是ASP.NET的主流方法。人们做什么?他们会复制目录和无数的文件吗?这对ASP.NET开发人员来说不是问题吗 (这是一种欺骗,因为我要提出我自己的答案)虽然不是ASP.NET中的主流方法,但这是非常可能的,使用一种称为ASP

有时,精通J2EE的人看到ASP.NET时会想,作为单个单元部署应用程序的支持在哪里?JSP/Servlet应用程序可以作为WAR文件进行部署,所有页面、内容、元数据和代码都在该归档文件中。war文件可以进行版本控制,很容易移动。可以保证整个应用程序都包含在一个单元中

这不是ASP.NET的主流方法。人们做什么?他们会复制目录和无数的文件吗?这对ASP.NET开发人员来说不是问题吗


(这是一种欺骗,因为我要提出我自己的答案)

虽然不是ASP.NET中的主流方法,但这是非常可能的,使用一种称为ASP.NET的
VirtualPathProvider
的结构。有了它,您可以从文件系统之外的东西中提供网站内容。例如,您可以直接从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或…?的源内容调整此想法

部分解决方案是。这会处理所有静态文件

解决方案的一部分是使用,将所有页面(即网站不可更新)编译为单个程序集。这会处理所有的.cs文件


所以剩下的是bin中的.dll,支持.dll文件和.aspx存根文件。默认情况下,IIS希望aspx文件在尝试为其提供服务器之前存在,因此需要存根。

当我第一次开始使用asp.net时,我简直不敢相信他们没有类似战争的部署模型。War部署是完全有意义的,而部署asp.net站点所需的数百个文件是非常荒谬的。只有一个文件。易于校验和验证。等。我唯一的意见是性能,zip文件提供程序应该首先将文件解压缩到asp.net卷影文件夹中。在没有看到实际代码的情况下,它可能已经这样做了。因此,唯一真正影响性能的是应用程序池回收,理论上,它必须重新检查依赖项,以确定是否需要再次解压缩。@enrol76-ZipVirtualFile不会解压缩文件。它不会写入文件系统。它只打开一个可读的流,该流在读取时解压缩。ASPNET本身将读取该流,我不知道它如何处理被读取的内容,但这取决于ASPNET。