2008-08-21 8 views
3

Wir versuchen, unsere DLLs für die Bereitstellung in ILMerge zu verschmelzen. Fast alles scheint gut zu funktionieren. Wir haben ein paar Web-Steuerelemente, die ClientScript.RegisterClientScriptResource verwenden, und diese sind 404-ing nach der Zusammenführung (Diese funktionierten vor der Zusammenführung).ILMerge und Web-Ressourcen

Zum Beispiel eine unserer Kontrollen aussehen würde

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

würde es im Projekt WebControls befinden, Montage Company.WebControls. Darunter wären ControlA.cs und ControlA.js. ControlA.js ist als eine eingebettete Ressource markiert. In den AssemblyInfo.cs I umfassen die folgenden:

[assembly: System.Web.UI.WebResource("Company.WebControls.ControlA.js", "application/x-javascript")] 

Danach wird in CompanyA.dll verschmolzen, was ist der richtige Weg, um diese Web-Ressource zu verweisen? 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

Antwort

4

OK - ich habe das funktioniert. Es sieht so aus, als wäre die primäre Assembly die einzige, deren Assembly-Attribute kopiert wurden. Wenn copyatrs gesetzt ist, würde der letzte in gewinnen, kein Merge (soweit ich das beurteilen kann). Ich habe ein Dummy-Projekt erstellt, um auf die anderen DLLs zu verweisen und alle Web-Ressourcen aus diesen Projekten in die Dummy-Assembly-Informationen einbezogen - jetzt werden mehrere Ressourcen aus mehreren Projekten alle korrekt geladen.

Finale Post-Build-Befehlszeile für Dummy-Projekt: "C: \ Programme \ Microsoft \ ILMerge \ ILMerge.exe" /keyfile:../../Company.snk/Platzhalter: True/out: Unternehmen .dll Company.Merge.dll Firma. *. dll

0

Sie müssen/allowMultiple zusammen mit/copyatrs setzen. Nur dann führt ILMerge die eingebetteten Ressourcen von allen Assemblys zusammen.