ILMerge und Webressourcen
-
09-06-2019 - |
Frage
Wir versuchen, unsere DLLs für die Bereitstellung zu einer zusammenzuführen, also ILMerge.Fast alles scheint großartig zu funktionieren.Wir haben ein paar Web-Steuerelemente, die Folgendes verwenden ClientScript.RegisterClientScriptResource
und diese sind nach der Zusammenführung 404-fähig (diese funktionierten vor der Zusammenführung).
Eines unserer Steuerelemente würde zum Beispiel so aussehen
namespace Company.WebControls
{
public class ControlA: CompositeControl, INamingContainer
{
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
this.Page.ClientScript.RegisterClientScriptResource(typeof(ControlA), "Company.WebControls.ControlA.js");
}
}
}
Es würde sich in Project WebControls, Assembly Company.WebControls, befinden.Darunter befinden sich ControlA.cs und ControlA.js.ControlA.js ist als eingebettete Ressource gekennzeichnet.In die AssemblyInfo.cs füge ich Folgendes ein:
[assembly: System.Web.UI.WebResource("Company.WebControls.ControlA.js", "application/x-javascript")]
Wie kann nach der Zusammenführung mit CompanyA.dll diese Webressource ordnungsgemäß referenziert werden?Die ILMerge-Befehlszeile lautet wie folgt (aus dem bin-Verzeichnis nach dem Build): "C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll
Lösung
OK – ich habe es geschafft.Offenbar war die primäre Baugruppe die einzige, deren Baugruppenattribute kopiert wurden.Wenn Copyattrs gesetzt wären, würde der letzte gewinnen, keine Zusammenführung (soweit ich das beurteilen kann).Ich habe ein Dummy-Projekt erstellt, um auf die anderen DLLs zu verweisen, und alle Webressourcen dieser Projekte in die Dummy-Assembly-Informationen aufgenommen. Jetzt werden mehrere Ressourcen aus mehreren Projekten korrekt geladen.
Letzte Post-Build-Befehlszeile für Dummy-Projekt:"C:\Programme\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../Company.snk /wildcards:True /out:Company.dll Company.Merge.dll Company.*.dll
Andere Tipps
Sie müssen /allowMultiple zusammen mit /copyattrs festlegen.Erst dann führt ILMerge die eingebetteten Ressourcen aller Baugruppen zusammen.