Frage

Manchmal schauen sich J2EE-versierte Leute Asp.net und Wunder an, Wo ist die Unterstützung für die Bereitstellung einer App als einzelne Einheit?? JSP/Servlet -Apps können als Kriegsdateien mit allen Seiten, Inhalten, Metadaten und Code in diesem einzelnen Archiv bereitgestellt werden. Die Kriegsdatei kann versioniert und leicht herumgezogen werden. Es besteht die Gewissheit, dass die gesamte App in einer einzigen Einheit enthalten ist.

Das ist kein Mainstream -Ansatz für ASP.NET. Was machen Leute? Greifen sie auf das Kopieren von Verzeichnissen und alle unzähligen Dateien zurück? Ist das für ASP.NET -Entwickler nur kein Problem?

(Dies ist eine Art Betrüger, weil ich meine eigene Antwort vorschlagen werde)

War es hilfreich?

Lösung

Obwohl kein Mainstream -Ansatz in ASP.NET VirtualPathProvider für ASP.NET. Damit können Sie Website -Inhalte aus Dingen ausstellen, die nicht das Dateisystem sind. Zum Beispiel könnten Sie eine ASP.NET -Website direkt aus einer ZIP -Datei ausstellen, ohne die Dateien auf die Festplatte zu entpacken.

Hier ist ein Download Das demonstriert oder veranschaulicht das Konzept mithilfe der Dotnetzip -Bibliothek, um ASP.NET beim Abziehen von Inhalten aus dem Reißverschluss zu unterstützen.

Die interessanten Code -Bits:

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;
        }
    }
}

Das VPP -Konstrukt funktioniert mit ASP.NET 2.0 oder höher und funktioniert mit jeder Website. Sie können die Idee natürlich anpassen, um Inhalte aus einer Datenbank, einem CMS oder ... ??

Andere Tipps

Ein Teil der Lösung ist eingebettete Ressourcen. Das kümmert sich um alle statischen Dateien.

Ein Teil der Lösung ist die Verwendung a Web -Bereitstellungsprojekt, Zusammenstellung aller Seiten (dh nicht updatable) in eine einzelne Baugruppe. Das kümmert sich um alle .cs -Dateien.

Was also übrig bleibt, ist ein .dll in Bin, unterstützt .dll -Dateien und die .aspx -Stub -Dateien. IIS standardmäßig möchte, dass die ASPX -Datei vorhanden ist, bevor sie versucht, sie zu servieren, daher der Stub.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top