4

私たちは、DLL を 1 つにマージして展開しようとしています。つまり、ILMerge です。ほとんどすべてがうまく機能しているようです。使用する Web コントロールがいくつかClientScript.RegisterClientScriptResourceあり、これらはマージ後に 404-ing になります (これらはマージ前に機能していました)。

たとえば、コントロールの 1 つは次のようになります。

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

これは、Project 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 にマージされた後、この Web リソースを参照する適切な方法は何ですか? ILMerge コマンド ラインは次のとおりです (ビルド後の bin ディレクトリから)。"C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll

4

2 に答える 2

4

OK - これでうまくいきました。アセンブリ属性がコピーされていたのはプライマリ アセンブリだけだったようです。copyattrs を設定すると、(私が知る限り)マージではなく、最後のものが勝ちます。他の DLL を参照するダミー プロジェクトを作成し、これらのプロジェクトのすべての Web リソースをダミー アセンブリ情報に含めました。複数のプロジェクトの複数のリソースがすべて正しく読み込まれるようになりました。

ダミー プロジェクトの最終ビルド後のコマンド ライン: "C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../Company.snk /wildcards:True /out:Company.dll Company.Merge .dll 会社.*.dll

于 2008-08-21T16:09:36.070 に答える
0

/copyattrs とともに /allowMultiple を設定する必要があります。ILMerge がすべてのアセンブリから埋め込まれたリソースをマージするのは、そのときだけです。

于 2013-03-20T09:17:30.453 に答える