Javascript als Resource verpacken/entpacken (Arbeiten mit Embedded Resources)

In meinen Utils-Bibliotheken, habe ich einige WebControls, welche auf div. Javascript-Bibliotheken zugreifen. Unter anderem z.B. jQuery oder jQueryUI aber eben auch selbst geschnitzte Bibliotheken.

Nachdem es bei Projektstart immer recht mühsam ist, die Files zusammenzutragen, habe ich mir überlegt, diese als Resource meinen Utils hinzuzufügen und zur Laufzeit zu entpacken und registrieren.

Zunächst fügt man die benötigten Files dem Projekt hinzu. Wichtig ist es, dass man in den Eigenschaften des Files die Option „Build Action -> Embedded Resource“ einstellt. Nur damit wird das File in der DLL verpackt! Die Größe der DLL vergrößert sich dadurch natürlich. Man sollte daher abwiegen, welche Resourcen man wirklich auf diesem Wege hinzufügen will.

Um die verpackten Resourcen nun zur Laufzeit zu entpacken, habe ich in meiner PageBase (Ableitung von Page, verwende ich in den Code-Behinds statt Page) einen Event hinzugefügt (im Page_Load()-Event), welcher eine entsprechende Funktion aufruft. Nachfolgend der Sourcecode:

private static string _fnJquery = String.Empty;
        /// <summary>
        /// Gets the fn cookie.
        /// </summary>
        /// <value>The fn cookie.</value>
        public static string fnJquery
        {
            get
            {
                if (string.IsNullOrEmpty(_fnJquery))
                    return ConfigUtils.ReadStringFromAppSettings("BasicLib_FileName_JqueryScript", "jquery-1.4.1.js");
                else
                    return _fnJquery;
            }
            set
            {
                _fnJquery = value;
            }
        }
 /// <summary>
        /// Gets a value indicating whether this instance is basic lib enabled.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is basic lib enabled; otherwise, <c>false</c>.
        /// </value>
        public static bool IsBasicLibEnabled
        {
            
            get {
                if(System.Web.HttpContext.Current.Session["BasicLib_Enabled"] == null)
                    return ConfigUtils.ReadBoolFromAppSettings("BasicLib_Enabled", false);
                else
                {
                    return Convert.ToBoolean(System.Web.HttpContext.Current.Session["BasicLib_Enabled"].ToString());
                }
            }
            set
            {
                System.Web.HttpContext.Current.Session.Add("BasicLib_Enabled", value);
            }
        }

/// <summary>
        /// Registers the basic lib.
        /// </summary>
        /// <param name="p">The p.</param>
        public static void RegisterBasicLib(Page p)
        {
            if (IsBasicLibEnabled)
            {
                // write resources to stream
                if (!System.IO.File.Exists(StringUtils.AddSlashIfNeeded(ClientScriptFilePath) + fnJquery))
                {
                    ExtractAndSaveResource();
                }

                // register script
                if (!p.ClientScript.IsClientScriptIncludeRegistered(fnJquery))
                    p.ClientScript.RegisterClientScriptInclude(fnJquery,
                                                               StringUtils.AddSlashIfNeeded(ClientScriptFilePath) +
                                                               fnJquery);

                
            }

        }

/// <summary>
        /// Extracts the and save resource.
        /// </summary>
        public static void ExtractAndSaveResource()
        {
            if (IsBasicLibEnabled)
            {
                const string nameSpace = "Utils.Web.Javascript.BasicLib.Resources";

                Stream sJquery = ResourceUtils.LoadResourceFromExecutingAssembly(nameSpace, fnJquery,
                                                                                 ResourceUtils.TargetAssembly.
                                                                                     ExecutingAssembly);
                // save streams
                string absClientScriptFilePath = System.Web.HttpContext.Current.Server.MapPath(ClientScriptFilePath);

                FileUtils.SaveContentToFile(fnJquery, absClientScriptFilePath, sJquery);
            }
        }

Achtung! Es muss unbedingt der genaue Namespace verwendet werden!! Ansonsten wird die Resource nicht gefunden und eine Exception geworfen.
Das Ergebnis sieht wie folgt aus und lässt keinen Unterschied zum „normalen“ hinzufügen einer JS-Datei erkennen:

Viel Spaß!

Advertisements

Über Christian

Ich komme aus Wien, wo ich gemeinsam mit meiner Lebensgefährtin und unserem brummenden Cocker-Spaniel Chewbacca lebe. Derzeit arbeite ich bei einem größeren Konzern, welcher in den Bereichen öffentlicher Verkehr, Energie, Telekommunikation, bis hin zur Bestattung tätig ist. Im Rahmen meiner Tätigkeit liegt der Fokus stark auf Eigenentwicklungen mittels div. .NET/Microsoft-Technologien. Derzeit arbeite ich hauptsächlich mit/am Microsoft Dyncamics CRM 2011, mit dem Ziel Geschäftsprozesse abzubilden.
Dieser Beitrag wurde unter C Sharp abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Eine Antwort zu Javascript als Resource verpacken/entpacken (Arbeiten mit Embedded Resources)

  1. Pingback: Javascript als Resource verpacken/entpacken (Arbeiten mit ScriptReferences/ScriptManager) « Programmers Horror

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

w

Verbinde mit %s