0

ILMERGE を使用してライブラリを別のライブラリにマージしようとしています。

プライマリ アセンブリは約 33 kb の大きさで、それにマージされるアセンブリは約 5 Mb です。マージ後の新しいアセンブリのサイズは 1.2 Mb です。

マージされたアセンブリをそれほど小さくする必要はないと思うので、マージからのログを理解する助けが必要です。

ログは次のとおりです。

ILMerge バージョン 2.13.307.0 Copyright (C) Microsoft Corporation 2004-2006. 全著作権所有。ILMerge /lib:C:\Windows\Microsoft.NET\Framework\v4.0.30319 /lib:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies /t:dll /log:merge.log /zeropekind /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:ericsconnectionsM.dll ericsconnections_32.dll chilkatdotnet45.dll ディレクトリ「C:\Windows\Microsoft. NET\Framework\v4.0.30319' for mscorlib.dll Running on Microsoft (R) .NET Framework v4.0.30319 mscorlib.dll version = 4.0.0.0 入力アセンブリのリスト: ericsconnections_32.dll chilkatdotnet45.dll Trying to read assembly fromファイル 'C: \Users\eervawo\Documents\Visual Studio 2010\Projects\EricsConnections\EricsConnections\bin\Debug\ericsconnections_32.dll'. アセンブリで正常に読み込まれました。EricsConnections_32 のメタデータで報告されたエラーはありませんでした。ファイル 'C:\Users\eervawo\Documents\Visual Studio 2010\Projects\EricsConnections\EricsConnections\bin\Debug\chilkatdotnet45.dll' からアセンブリを読み取ろうとしています。PDB ファイルが見つかりません。アセンブリ 'chilkatdotnet45.dll' のデバッグ情報は利用できません。アセンブリで正常に読み込まれました。ChilkatDotNet45 のメタデータで報告されたエラーはありませんでした。すべての入力アセンブリに互換性のある PeKind があることを確認しています。EricsConnections_32.PeKind = ILonly, Requires32bits ChilkatDotNet45.PeKind = 0 「ChilkatDotNet45」の有効な PeKind ILonly すべての入力アセンブリには、互換性のある PeKind 値があります。AssemblyResolver: アセンブリ 'EricsConnections_32' がアセンブリ 'System.Xml.Linq' を参照しています。AssemblyResolver: アセンブリのディレクトリを参照しようとしています。AssemblyResolver: アセンブリのディレクトリを参照しているアセンブリが見つかりませんでした。AssemblyResolver: 入力ディレクトリを試行しています。AssemblyResolver: 入力ディレクトリにアセンブリが見つかりませんでした。AssemblyResolver: ユーザー指定のディレクトリを試行しています。アセンブリ参照 'System.Xml.Linq' を 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Xml.Linq.dll' に解決しました。(クライアント提供のディレクトリを使用。) PDB ファイルが見つかりません。アセンブリ 'System.Xml.Linq' のデバッグ情報は利用できません。AssemblyResolver: アセンブリ ' EricsConnections_32' は、アセンブリ 'System.Core' を参照しています。AssemblyResolver: アセンブリのディレクトリを参照しようとしています。AssemblyResolver: アセンブリのディレクトリを参照しているアセンブリが見つかりませんでした。AssemblyResolver: 入力ディレクトリを試行しています。AssemblyResolver: 入力ディレクトリにアセンブリが見つかりませんでした。AssemblyResolver: ユーザー指定のディレクトリを試行しています。アセンブリ参照 'System.Core' を 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Core.dll' に解決しました。(クライアント提供のディレクトリを使用。) PDB ファイルが見つかりません。アセンブリ 'System.Core' のデバッグ情報は利用できません。ターゲット アセンブリのアセンブリ レベル属性にアセンブリ 'EricsConnections_32' を使用します。アセンブリ 'EricsConnections_32' をターゲット アセンブリにマージしています。アセンブリ 'ChilkatDotNet45' をターゲット アセンブリにマージしています。アセンブリ 'ChilkatDotNet45' のアセンブリ レベル属性 'System.Security.AllowPartiallyTrustedCallersAttribute' がターゲット アセンブリから削除されています アセンブリ 'EricsConnections_32' から 8 つの Win32 リソースをターゲット アセンブリにコピーしています。ターゲット アセンブリのメタデータで報告されたエラーはありませんでした。ILMerge: ターゲット アセンブリ 'ericsconnectionsM.dll' を書き込んでいます。AssemblyResolver: アセンブリ 'System' がアセンブリ 'System.Configuration' を参照しています。AssemblyResolver: アセンブリのディレクトリを参照しようとしています。PDB ファイルが見つかりません。アセンブリ 'System.Configuration' のデバッグ情報は利用できません。アセンブリ参照 'System.Configuration' を 'C:\Windows\Microsoft.NET\Framework\v4.0' に解決しました。30319\System.Configuration.dll'. (モジュールのディレクトリを参照して使用されます。) 参照されたモジュール 'KERNEL32.dll' の場所は '' 参照されたモジュールの場所 '' は '' 参照されたアセンブリ 'mscorlib' の場所は 'C:\Windows\Microsoft.NET\Framework\v4. 0.30319\mscorlib.dll' mscorlib のメタデータで報告されたエラーはありませんでした。参照されたアセンブリ 'Microsoft.VisualBasic' の場所は 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.VisualBasic.dll' です Microsoft.VisualBasic のメタデータで報告されたエラーはありませんでした。参照されたアセンブリ 'System.Xml.Linq' の場所は 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Xml.Linq.dll' です System.Xml.Linq のメタデータにエラーは報告されていません。参照されたアセンブリ 'System.Core' の場所は 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Core.dll' です System.Core のメタデータで報告されたエラーはありませんでした。参照されたアセンブリ 'System.Data' の場所は 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll' です System.Data のメタデータで報告されたエラーはありませんでした。参照されたアセンブリ 'システム' の場所は 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\system.dll' です システムのメタデータで報告されたエラーはありませんでした。ILMerge: 完了。\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll' System.Data のメタデータでエラーは報告されていません。参照されたアセンブリ 'システム' の場所は 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\system.dll' です システムのメタデータで報告されたエラーはありませんでした。ILMerge: 完了。\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll' System.Data のメタデータでエラーは報告されていません。参照されたアセンブリ 'システム' の場所は 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\system.dll' です システムのメタデータで報告されたエラーはありませんでした。ILMerge: 完了。

何がうまくいかないのですか?

4

2 に答える 2

3

同社のウェブサイトから:

Chilkat.NET コンポーネントは Managed Visual C++ で記述されています。

適切な名前である C++/CLI の方がよく知られています。混合モードのアセンブリが作成され、マージできません。ILMerge は、このようなアセンブリ内のアンマネージ コードを適切に処理する方法を知りません。/targetplatform コマンドライン引数が間違っていることも注目に値します。これは、この障害モードを引き起こします。

于 2013-10-02T16:53:31.420 に答える
2

ILmergeをあきらめました。Costura.Fody を試してみてください。ナゲット パッケージをインストールするだけです (Packet Manager を使用するInstall-Package Costura.Fodyとうまくいく場合)。以上です。

次回ビルドすると、作成された .exe にはすべての参照がリソースとしてマージされ、自動的に読み込まれます。出力ディレクトリには参照された DLL が引き続き含まれますが、アプリはそれらがなくても動作します。

管理されていないライブラリを使用しているように見えるため、FodyWeavers.xmlファイルにいくつかのオプションを設定する必要がある場合があります (ナゲット パッケージをインストールすると、プロジェクトに追加されます)。プロジェクトのドキュメントを引用:

混合モード アセンブリは、マネージ アセンブリと同じ方法で読み込むことはできません。

したがって、Costura がどのアセンブリが混合モードで、どの環境でそれらをロードするかを識別できるようにするには、これらのリストの一方または両方にそれらの名前を含める必要があります。

名前に .exe または .dll を含めないでください。

<Costura>
    <Unmanaged32Assemblies>
        Foo32
        Bar32
    </Unmanaged32Assemblies>
    <Unmanaged64Assemblies>
        Foo64
        Bar64
    </Unmanaged64Assemblies>
</Costura>

他の使用例については、プロジェクトページを確認してください。

于 2016-09-21T15:19:08.080 に答える