Results for tag "resource-entpacken"

Javascript als Resource verpacken/entpacken (Arbeiten mit ScriptReferences/ScriptManager)

Manche von euch haben vielleicht meinen letzten Blog-Entry
Javascript als Resource verpacken/entpacken (Arbeiten mit Embedded Resources) gelesen. Mein Mitstreiter domiwaldi hat mich auf die Idee gebracht, statt dem ClientScriptManager den ScriptManager zu verwenden. Nachdem das Vorteile bei u.a. der Komprimierung hat, habe ich mir das mal angesehen und siehe da, der Quellcode liess sich auch gleich um einiges Verkürzen.

Nachfolgend seht ihr die aktualisierte Version der RegisterBasicLib-Funktion:

[sourcecode language=“csharp“]
public const string FnJquery = "Utils.Web.Javascript.BasicLib.Resources.jquery-1.4.1.js";
public const string FnJqueryUi = "Utils.Web.Javascript.BasicLib.Resources.jquery-ui-1.8.5.custom.min.js";
public const string FnCookie = "Utils.Web.Javascript.BasicLib.Resources.jquery.cookie.min.js";
public const string FnJson = "Utils.Web.Javascript.BasicLib.Resources.jquery.json-2.2.min.js";
public const string FnBasicLib = "Utils.Web.Javascript.BasicLib.Resources.Utils.BasicLib.js";

/// <summary>
/// Registers the basic lib.
/// </summary>
/// <param name="p">The p.</param>
public static void RegisterBasicLib(ScriptManager sm)
{
Page p;
if (IsBasicLibEnabled)
{
ScriptReference sr = new ScriptReference(FnJquery, System.Reflection.Assembly.GetExecutingAssembly().FullName);
sm.Scripts.Add(sr);

sr = new ScriptReference(FnJqueryUi, System.Reflection.Assembly.GetExecutingAssembly().FullName);
sm.Scripts.Add(sr);

sr = new ScriptReference(FnJson, System.Reflection.Assembly.GetExecutingAssembly().FullName);
sm.Scripts.Add(sr);

sr = new ScriptReference(FnCookie, System.Reflection.Assembly.GetExecutingAssembly().FullName);
sm.Scripts.Add(sr);

sr = new ScriptReference(FnBasicLib, System.Reflection.Assembly.GetExecutingAssembly().FullName);
sm.Scripts.Add(sr);

}
}
[/sourcecode]

Wichtig ist jedoch zu bedenken, dass die Resourcen als Webresourcen in der Assembly.info deklariert werden müssen.

[sourcecode language=“csharp“]
[assembly: System.Web.UI.WebResource(Utils.Web.BasicLib.FnBasicLib, "text/javascript")]
[assembly: System.Web.UI.WebResource(Utils.Web.BasicLib.FnCookie, "text/javascript")]
[assembly: System.Web.UI.WebResource(Utils.Web.BasicLib.FnJquery, "text/javascript")]
[assembly: System.Web.UI.WebResource(Utils.Web.BasicLib.FnJqueryUi, "text/javascript")]
[assembly: System.Web.UI.WebResource(Utils.Web.BasicLib.FnJson, "text/javascript")]
[/sourcecode]

Die Markierung als Embedded Resource im Properties-Dialog ist hingegen nicht mehr notwendig. Auch das vorherige entpacken und abspeichern der Datei ist nicht länger notwendig, was die Geschichte sehr angenehm macht.

Viel Spaß !

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:

[sourcecode language=“csharp“]
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);
}
}
[/sourcecode]

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ß!