2008-08-21 56 views
3

我們正試圖將我們的DLL合併爲一個用於部署的ILMerge。幾乎一切似乎都很好。我們有幾個使用ClientScript.RegisterClientScriptResource的Web控件,這些控件在合併之後是404(這些工作在合併之前)。ILMerge和Web Resources

例如我們的控制的一個看起來像

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");     
    }  
    } 
} 

這將是位於項目器WebControls,組裝Company.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目錄):​​

回答

4

好的 - 我得到了這個工作。看起來主要程序集是唯一一個程序集屬性被複制的程序集。使用copyattrs設置,最後一個會贏,而不是合併(據我所知)。我創建了一個虛擬項目來引用其他DLL,並在虛擬裝配信息中包含來自這些項目的所有Web資源 - 現在多個項目中的多個資源都加載正確。

假項目的最終生成後命令行: 「C:\ Program Files \ Microsoft \ ILMerge \ ILMerge.exe」/keyfile:../../Company.snk /通配符:True/out:公司.dll Company.Merge.dll Company。*。dll

0

您需要設置/ allowMultiple以及/ copyattrs。只有這樣,ILMerge纔會合併來自所有程序集的嵌入式資源。