2008-08-21 19 views
3

Nous essayons de fusionner nos DLL en une pour le déploiement, donc ILMerge. Presque tout semble fonctionner très bien. Nous avons quelques contrôles Web qui utilisent ClientScript.RegisterClientScriptResource et ceux-ci sont 404-ing après la fusion (Ceux-ci ont fonctionné avant la fusion).ILMerge et les ressources Web

Par exemple, un de nos contrôles ressemblerait

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

Il serait situé dans le projet WebControls, Company.WebControls de montage. En dessous se trouvent ControlA.cs et ControlA.js. ControlA.js est marqué comme une ressource incorporée. Dans les AssemblyInfo.cs I comprennent les suivants:

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

Après cela est fusionné dans CompanyA.dll, quelle est la bonne façon de faire référence à cette ressource web? La ligne de commande ILMerge est la suivante (à partir du répertoire bin après la construction): "C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll

Répondre

4

OK - J'ai commencé à travailler. Il semble que l'assemblage principal était le seul dont les attributs d'assemblage étaient copiés. Avec copyattrs défini, le dernier en gagnerait, pas une fusion (autant que je sache). J'ai créé un projet factice pour référencer les autres DLL et inclus toutes les ressources web de ces projets dans les informations d'assemblage factices - maintenant plusieurs ressources de plusieurs projets se chargent toutes correctement.

Ligne de commande post-construction finale pour le projet factice: "C: \ Program Files \ Microsoft \ ILMerge \ ILMerge.exe" /keyfile:../../Company.snk/wildcards: True/out: Société .dll Company.Merge.dll Entreprise. *. dll

0

Vous devez définir/allowMultiple avec/copyattrs. C'est alors seulement qu'ILMerge va fusionner les ressources embarquées de tous les assemblages.