問題タブ [ilmerge]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ILMerge のベスト プラクティス
ILMerge を使用していますか? ILMerge を使用して複数のアセンブリをマージし、dll の展開を容易にしていますか? アセンブリを一緒に ILMerging した後、本番環境での展開/バージョン管理で問題が見つかりましたか?
可能であれば、ILMerge を使用して展開の摩擦を減らすことに関するアドバイスを探しています。
c# - ILMerge と Web リソース
私たちは、DLL を 1 つにマージして展開しようとしています。つまり、ILMerge です。ほとんどすべてがうまく機能しているようです。使用する Web コントロールがいくつかClientScript.RegisterClientScriptResource
あり、これらはマージ後に 404-ing になります (これらはマージ前に機能していました)。
たとえば、コントロールの 1 つは次のようになります。
これは、Project WebControls、アセンブリ Company.WebControls にあります。その下に ControlA.cs と ControlA.js があります。ControlA.js は埋め込みリソースとしてマークされています。AssemblyInfo.cs には、次のものが含まれます。
これが CompanyA.dll にマージされた後、この Web リソースを参照する適切な方法は何ですか? ILMerge コマンド ラインは次のとおりです (ビルド後の bin ディレクトリから)。"C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll
c# - C# コンパイラがコードを誤って最適化する
リモート Web サーバーで ASP.NET アプリケーションを実行していますが、次のエラーが発生し始めました。
DLL 内のコードを逆アセンブルしましたが、コンパイラがコードを正しく最適化していないようです。( Set は一連の一意のオブジェクトを実装するクラスであることに注意してください。これは IEnumerable から継承されます。) この行:
次の行にコンパイルされます。
CalendarModule クラスはまったく関係のないクラスです!! .NET がこのようなコードを間違ってコンパイルしていることに気付いた人はいますか?
更新 #1:この問題は、Microsoft のILMergeツールによって導入されたようです。現在、それを克服する方法を調査中です。
更新 #2:これまでに、この問題を解決する方法が 2 つあります。根本的な問題が何であるかはよくわかりませんが、これらの両方で修正されます。
最適化をオフにします。
別のマシンで ILMerge を使用してアセンブリをマージします。
そのため、ビルド マシンの構成が何らかの形で間違っているのか (1 年以上マシンを使用してリリースをビルドしていることを考えると奇妙です)、それとも他の問題なのか疑問に思っています。
.net - アセンブリをマージするためのベスト プラクティスは?
依存関係に関連して他のプロジェクトに含まれるライブラリのリリースを作成するときのヒューリスティックとは何か、それらを含める必要があるかどうか疑問に思っています。
私の問題は次のとおりです。
名前が示すように、複数の場所で使用できる一連のユーティリティを提供する CommonUtilities ライブラリがあります。CommonUtilities の依存関係には、log4net.dll (ロギング フレームワーク) と Oracle.DataAccess.dll (データベース ドライバ) が含まれます。
CommonUtilities を含めたい MyProject という別のプロジェクトがあります。MyProject も Oracle.DataAccess に依存しています。
ILMerge を使用して CommonUtilities を単一のアセンブリ CommonUtilities.dll にマージし、それを MyProject から参照すると、すべてがコンパイルされますが、MyProject から Oracle.DataAccess を明示的に参照する必要があります。これは依存関係であり、CU にマージされたアセンブリを使用しないためです。Oracle.DataAccess への参照を追加すると、2 つの Oracle.DataAccess アセンブリが参照されるため、using ステートメントがあいまいになります。
私の場合、 ILMerge /Internalize を使用すると、内部化された Oracle.DataAccess アセンブリの型が CommonUtilities から返され、内部 MyProject としてマークされているため、返された型が認識されないため、コンパイル エラーが発生します。
これを機能させる唯一の方法は、この特定のアセンブリ (Oracle.DataAccess) を CommonUtilities にマージせず、MyProject からのみ参照することです。これにより、次のような新しい問題が発生します。どの Oracle.DataAccess.dll を参照する必要がありますか? CommonUtils で配布される依存関係ですか?
このすべてについて他の方法はありますか?
c# - セットアッププロジェクトでIlMergeを使用するにはどうすればよいですか?
IlMergeを使用して、プロジェクトのすべてのdllを1つのexeにマージしました。メインのcsprojの「インポート」で参照されるターゲットファイルを使用します。
ターゲットのExecCommandは次のとおりです。
これは機能します。
しかし、セットアッププロジェクトがあります。ビルドすると、「インポート」が無視され、dllがマージされません。セットアッププロジェクトでターゲットファイルを使用するにはどうすればよいですか?
メインプロジェクトのビルド後のイベント(プロジェクトのプロパティ内)でIlmergeに同じコードを書いてみましたが、エラーコード1が表示されます。
c# - ilmergeは出力を最適化しますか?
MicrosoftのILMERGE.EXEツールを使用してマージされたDLLがいくつかあります。すべてのDLLで、「コードの最適化」がオフになっています。
Webアプリケーションでコードをデバッグしようとすると、(Visual Studioの)モジュール画面にdllが最適化されていることが表示されます。これは、アプリケーションの特定の部分をデバッグしようとするときに明らかに問題を引き起こします。
コードを最適化しないILMERGEを使用してDLLを構築する方法はありますか?
.net - ILMerge 操作によって生成されたアセンブリにどのように署名しますか?
ILMerge を使用して、プロジェクト内のすべてのアセンブリを 1 つのアセンブリにマージすることができましたが、マージされたアセンブリに署名する方法がないようです。
ILMerge によって生成されたマージされたアセンブリに厳密な名前を追加するために実行できるコマンド ライン オプションまたはコマンドはありますか?
reflection - クラスの ILMerge とカスタム属性
いくつかの dll ファイルを一緒にマージしましたが、マージされた dll ファイルの 1 つでクラスを見つけるコードが、それらにあったカスタム属性を認識できません。すべてのクラスをうまく見つけることができますが、属性がありません。これをどのように修正できますか?
編集:さらに調査すると、属性はクラスにありますが、型の Guid は元のものとは異なるため、GetCustomAttribute を見つけることができません。
icons - 最終的な .exe の ILMERGE アイコン
いくつかの dll と .exe ファイル (input.exe と呼びます) があります。これらは現在、ILMERGE を使用して単一の output.exe ファイルにマージされています。
input.exe ファイルにはアイコンが付いています。ただし、作成された output.exe には、input.exe にアイコンがありません。
要約すると、output.exe(ILMERGEを使用して作成されたもの)のアイコンが必要です
これを理解するのを手伝ってもらえますか?
ありがとう。
resources - CLRアセンブリのリソースを追加、削除、および更新するにはどうすればよいですか?
長い間調べてみましたが、アセンブリ内の管理対象リソースの変更に関する情報が見つかりません(Win32リソースとそれらを変更するためのAPIについてはすでによく知っていることに注意してください)。
私のアプリケーションには、エンドユーザーが更新する必要のあるリソースがあり、アプリケーションは単一の実行可能ファイルとして配布されます(したがって、衛星アセンブリだけを使用することはできません)。
いくつかの可能な回避策がありますが、それらはハックのようです。
1つ目は、ILMergeを使用することです。新しいリソースを含む新しいアセンブリをメモリ内に作成し、ILMergeを使用して元のアセンブリと組み合わせて新しいプログラムを形成します。唯一の欠点は、リソースを更新または削除できないことです。
2つ目はやや似ています。新しいアセンブリを形成するためのリソースを追加するために/embedスイッチを使用してal.exeに対して実行される.netmodule(C#コンパイラから出力)があります。欠点は、元のアセンブリのリソースが存在しないことです。
私はILMergeオプションに傾倒していますが、再配布に関する条件はあいまいです。EULAは再配布権について言及していません(したがって、このNegative Freedom社会では許可されていると思います)が、Microsoft Researchのページには、再配布は許可されていないと記載されています(ただし、商業的再配布を指している可能性があることから、あいまいな表現になっています。これは非営利のGPLプロジェクトであるため、これは当てはまりません)。
ありがとう