문제

배포를 위해 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가 모든 어셈블리의 포함된 리소스를 병합합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top