Question

Nous essayons de fusionner nos DLL en une seule pour le déploiement, donc ILMerge.Presque tout semble fonctionner à merveille.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).

Par exemple, l'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 Project WebControls, assembly Company.WebControls.En dessous se trouveraient ControlA.cs et ControlA.js.ControlA.js est marqué comme ressource intégrée.Dans AssemblyInfo.cs, j'inclus les éléments suivants :

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

Une fois celui-ci fusionné dans CompanyA.dll, quelle est la bonne façon de référencer 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

Était-ce utile?

La solution

OK - j'ai réussi à faire fonctionner ça.Il semble que l'assembly principal soit le seul dont les attributs d'assembly ont été copiés.Avec copyattrs défini, le dernier gagnerait, pas une fusion (pour 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 sur l'assemblage factice. Désormais, plusieurs ressources de plusieurs projets se chargent toutes correctement.

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

Autres conseils

Vous devez définir /allowMultiple avec /copyattrs.Ce n'est qu'alors qu'ILMerge fusionnera les ressources intégrées de tous les assemblys.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top