ILMerge e recursos da web
-
09-06-2019 - |
Pergunta
Estamos tentando mesclar nossas DLLs em uma para implantação, portanto, ILMerge.Quase tudo parece funcionar muito bem.Temos alguns controles da web que usam ClientScript.RegisterClientScriptResource
e estes são 404 após a mesclagem (funcionavam antes da mesclagem).
Por exemplo, um dos nossos controles seria parecido com
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");
}
}
}
Ele estaria localizado no Projeto WebControls, assembly Company.WebControls.Abaixo estariam ControlA.cs e ControlA.js.ControlA.js está marcado como um recurso incorporado.No AssemblyInfo.cs incluo o seguinte:
[assembly: System.Web.UI.WebResource("Company.WebControls.ControlA.js", "application/x-javascript")]
Depois que isso for mesclado em CompanyA.dll, qual é a maneira correta de fazer referência a esse recurso da web?A linha de comando do ILMerge é a seguinte (do diretório bin após a construção): "C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll
Solução
OK - eu fiz isso funcionar.Parece que a montagem primária foi a única cujos atributos de montagem estavam sendo copiados.Com copyattrs definido, o último venceria, não uma mesclagem (até onde eu sei).Criei um projeto fictício para fazer referência a outras DLLs e incluí todos os recursos da web desses projetos nas informações de montagem fictícia - agora vários recursos de vários projetos estão sendo carregados corretamente.
Linha de comando final pós-construção para projeto fictício:"C:\Arquivos de programas\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../Company.snk /wildcards:True /out:Company.dll Company.Merge.dll Company.*.dll
Outras dicas
Você precisa definir /allowMultiple junto com /copyattrs.Só então o ILMerge mesclará os recursos incorporados de todos os assemblies.