ILMerge e risorse Web
-
09-06-2019 - |
Domanda
Stiamo tentando di unire le nostre DLL in una sola per la distribuzione, quindi ILMerge.Quasi tutto sembra funzionare alla grande.Abbiamo un paio di controlli Web che utilizzano ClientScript.RegisterClientScriptResource
e questi sono 404 dopo la fusione (funzionavano prima della fusione).
Ad esempio, uno dei nostri controlli sarebbe simile
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");
}
}
}
Si troverebbe in Project WebControls, assembly Company.WebControls.Sotto ci sarebbero ControlA.cs e ControlA.js.ControlA.js è contrassegnato come risorsa incorporata.In AssemblyInfo.cs includo quanto segue:
[assembly: System.Web.UI.WebResource("Company.WebControls.ControlA.js", "application/x-javascript")]
Dopo che questo è stato unito a CompanyA.dll, qual è il modo corretto per fare riferimento a questa risorsa Web?La riga di comando di ILMerge è la seguente (dalla directory bin dopo la compilazione): "C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll
Soluzione
OK, ho capito che funziona.Sembra che l'assembly primario fosse l'unico i cui attributi di assembly venivano copiati.Con i copyattrs impostati, vincerebbe l'ultimo, non una fusione (per quanto ne so).Ho creato un progetto fittizio per fare riferimento alle altre DLL e ho incluso tutte le risorse Web di tali progetti nelle informazioni sull'assembly fittizio: ora più risorse da più progetti vengono tutte caricate correttamente.
Riga di comando finale post-compilazione per il progetto fittizio:"C:\Programmi\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../Company.snk /wildcards:True /out:Company.dll Company.Merge.dll Company.*.dll
Altri suggerimenti
È necessario impostare /allowMultiple insieme a /copyattrs.Solo allora ILMerge unirà le risorse incorporate da tutti gli assembly.