ILMerge 및 웹 리소스
-
09-06-2019 - |
문제
배포를 위해 DLL을 하나로 병합하여 ILMerge를 시도하고 있습니다.거의 모든 것이 잘 작동하는 것 같습니다.우리는 다음을 사용하는 몇 가지 웹 컨트롤을 가지고 있습니다. ClientScript.RegisterClientScriptResource
이는 병합 후 404-ing입니다(병합 이전에 작동함).
예를 들어 컨트롤 중 하나는 다음과 같습니다.
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");
}
}
}
이는 Company.WebControls 어셈블리인 Project WebControls에 위치합니다.그 아래에는 ControlA.cs 및 ControlA.js가 있습니다.ControlA.js는 포함된 리소스로 표시됩니다.AssemblyInfo.cs에는 다음이 포함됩니다.
[assembly: System.Web.UI.WebResource("Company.WebControls.ControlA.js", "application/x-javascript")]
이것이 CompanyA.dll에 병합된 후 이 웹 리소스를 참조하는 적절한 방법은 무엇입니까?ILMerge 명령줄은 다음과 같습니다(빌드 후 bin 디렉터리에서). "C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll
해결책
알았어 - 잘 됐어.기본 어셈블리가 어셈블리 속성이 복사된 유일한 어셈블리인 것 같습니다.copyattrs를 설정하면 병합이 아닌 마지막 항목이 승리합니다(내가 알 수 있는 한).다른 DLL을 참조하기 위해 더미 프로젝트를 만들고 해당 프로젝트의 모든 웹 리소스를 더미 어셈블리 정보에 포함시켰습니다. 이제 여러 프로젝트의 여러 리소스가 모두 올바르게 로드됩니다.
더미 프로젝트의 최종 빌드 후 명령줄:"C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../Company.snk /wildcards:True /out:Company.dll Company.Merge.dll Company.*.dll
다른 팁
/copyattrs와 함께 /allowMultiple을 설정해야 합니다.그런 다음에만 ILMerge가 모든 어셈블리의 포함된 리소스를 병합합니다.