問題タブ [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.
ilmerge - ILMerge の問題: コマンド プロンプトのみで開始する
ILMerge を使用して C#.Net 2.0 で 5 つの DLL と exe を 1 つの exe ファイルにビルドします。問題は、出力exeを起動するたびに、空のコマンドプロンプトがexeで開かれることです。誰でも問題を知っていて、それを解決する方法を知っていますか?
.net - ILMergeが使用されたことをどのように知ることができますか
アセンブリが2つの異なるアセンブリでILMergeを使用した場合の出力/結果であるかどうかを確認できるようにしたいと思います。それがどれほどざらざらしているのかは関係ありません。ILを解析する必要がある場合は、それを実行するつもりです。アセンブリの作成者がILMergeを使用したことを示すものはありますか?
visual-studio - ILMergeをVisualStudioビルドプロセスに統合してアセンブリをマージするにはどうすればよいですか?
1つの.NETDLLアセンブリとVB.NETコンソールアプリケーションプロジェクトによって参照される1つのC#クラスライブラリプロジェクトを1つのコマンドラインコンソール実行可能ファイルにマージしたいと思います。
コマンドラインからILMergeを使用してこれを行うことができますが、この参照アセンブリとプロジェクトのマージをVisualStudioプロジェクトに統合したいと思います。私の読書から、MSBuildタスクまたはターゲットを介してこれを実行し、C#/ VB.NETプロジェクトファイルに追加するだけでよいことを理解していますが、MSBuildは大きなトピックであるため、具体的な例は見つかりません。さらに、ビルド後のイベントにILMergeコマンドを追加する参照がいくつか見つかりました。
ILMergeをVisualStudio(C#/ VB.NET)プロジェクト(MSBuildプロジェクト)に統合して、参照されているすべてのアセンブリ(copy-local = true)を1つのアセンブリにマージするにはどうすればよいですか?
これは、可能なILMerge.Targetsファイルにどのように結びついていますか?
ビルド後のイベントを使用する方が良いですか?
c# - Visual Studioでパス環境変数を設定するにはどうすればよいですか?
ビルド後のステップでILMergeを使用しています。
相互運用性の理由から、ILMerge相対パスを使用したいと思います。ビルド後の手順からアクセスできるパス
環境変数
を設定するにはどうすればよいですか?
.net - .NETILMergedアセンブリのパフォーマンス
「Foo.Bar」と「Foo.Baz」の2つの.NETライブラリがあります。
「Foo.Bar」は自己完結型ですが、「Foo.Baz」は「Foo.Bar」を参照します。
私が次のことをすると仮定します。
- ILMergeを使用して、「Foo.Bar.dll」と「Foo.Baz.dll」を「Foo1.dll」にマージします。
- 「Foo.Bar」と「Foo.Baz」の両方のエンティティを含む新しいソリューションを作成し(ソースコードにアクセスできるため)、これを「Foo2.dll」にコンパイルします。
Foo1.dllとFoo2.dllの機能を外部プロジェクトから使用した場合、それらのパフォーマンスに違いはありますか?もしそうなら、このパフォーマンスの違いはどれほど重要ですか、そしてそれは一度限りの(負荷時?)または継続的な違いですか?どちらのアプローチにも他の長所または短所はありますか?
vb.net - VB.NET アセンブリで厳密な名前の検証に失敗しました
Visual Studio でコンパイルした後、VB.Net 1.1 アプリケーションが問題なく動作します。ただし、ILMerge を使用して、参照されているすべてのアセンブリを 1 つの実行可能ファイルに結合し、簡単に移動できるようにしたいと考えています。ILMerge 経由で送信して実行しようとすると、エラーが発生します
「Assembly.exe の厳密な名前の検証に失敗しました」.....
しかし、私のものはどれも強い名前ではありません! ここでこの投稿を見ました:厳密な名前の検証に失敗し、「sn.exe -Vr merged.exe」で実行しようとしましたが、次のエラーが表示されます:
「merged.exe は厳密な名前のアセンブリを表していません」
他の誰かが以前にこの問題を抱えていましたか? どうすれば修正できますか?
アップデート:
ここでは、厳密な名前の検証は本当の問題ではないように感じ始めています。私は .NET v1.1 に対してビルドし、それがインストールされている唯一の .NET バージョン (たまたま Windows 2003) であるマシン上で実行しています。マージされた実行可能ファイルは、試したすべての Windows 2003 マシンでそのエラーで停止しているように見えますが、より新しい OS (Vista) で実行しようとすると、少なくとも開始されますが、環境がそうでないため、実際には良いテストではありません。実際のテストに適しています。
- app.config の設定が正しいことを確認しました (v1.1.4322 の必要かつサポートされているランタイム バージョンを指定しています)。
- ILMerge を使用してアセンブリを実行するときに、/targetplatform:v1.1 オプションを使用します。
ILMerge が問題の原因であることは間違いありません (つまり、マージする前に問題なく動作します)。ただ、それを修正する方法がわかりません。
.net - Visual Studio プロジェクトで ILMerge を使用して作成されたアセンブリを参照する
Visual Studio に 5 つのプロジェクトを持つソリューションがあります。彼らです:
Foo.Core
: コア機能Foo.Api
: コアの上に構築された生成コードFoo.Web
: Web 固有の拡張機能Foo.Web.Mvc
: MVC 固有の拡張機能Newtonsoft.Json
: サードパーティ ライブラリ
ILMerge を使用して をマージし、Foo.Core
という単一のアセンブリにします。それは簡単な部分です。Foo.Api
Newtonsoft.Json
Foo
私が直面している問題はFoo.Web
、Foo.Web.Mvc
両方がマージされたアセンブリの 3 つすべてを参照する必要があることです。
元のアセンブリを参照すると、ILMerge の実行後に無効な参照が作成されます。
ILMerged アセンブリを参照する場合、デバッグ アセンブリを参照してから、すべてをパッケージ化する前にそれを変更する必要がありますが、これは理想的ではないようです。
Foo
3 つのマージされたアセンブリを参照し、独自の出力を ILmerged アセンブリに置き換えるというプロジェクトを作成しようとしましたが、まったく機能していないようです。
これを行う信頼できる方法はありますか?
.net - ILMerge されたアセンブリのランタイム バージョンは v4.0.20926 です。予想されるバージョンは v4.0.30319 です
これは私の .csproj AfterBuild がどのように見えるかです:
私は64ビットのWindowsを実行しています。.NET Framework を から...\Microsoft.NET\Framework\...
に変更しようとしまし...\Microsoft.NET\Framework64\...
たが、役に立ちませんでした。
また、ILMerge ディレクトリに ILMerge.exe.config を作成しました。
ILMerge が 4.0.30319 アセンブリを生成しないのはなぜですか?
.net - .NET4ライブラリでILMergeを使用する
2つの問題:
1)基本的な.NETアセンブリはILMergedアセンブリに含まれていません
.NET 3.5 / VisualStudio2008から.NET4/ Visual Studio 2010にアップグレードした後、ビルド後のILMergeの使用に問題があります。ターゲットフレームワークが「.NETFramework4」に設定されているプロジェクトがいくつかあるソリューションがあります。 。次のILMergeコマンドを使用して、個々のプロジェクトDLLを単一のDLLにマージします。
.NET 4フレームワークディレクトリの場所の指定を省略した場合、ILMergeから「未解決のアセンブリ参照は許可されていません:システム」エラーが発生します。MSTestディレクトリの場所の指定を省略した場合、「未解決のアセンブリ参照は許可されていません:Microsoft.VisualStudio.QualityTools.UnitTestFramework」エラーが発生します。
上記のILMergeコマンドは機能し、DLLを生成します。ただし、別の.NET 4 C#プロジェクトでそのDLLを参照し、その中でコードを使用しようとすると、次の警告が表示されます。
プライマリ参照「MyILMergedDLL」は、バージョンよりも高いバージョン「4.0.65535.65535」を持つ.NET Frameworkアセンブリ「mscorlib、Version = 4.0、Culture = neutral、PublicKeyToken = b77a5c561934e089」に間接的に依存しているため、解決できませんでした。現在のターゲットフレームワークの「4.0.0.0」。
その後、フラグを削除して/targetplatform:v4
MyILMergedDLL.dllを使用しようとすると、次のエラーが発生します。
タイプ'System.Xml.Serialization.IXmlSerializable'は、参照されていないアセンブリで定義されています。アセンブリ'System.Xml、Version = 4.0.0.0、Culture = neutral、PublicKeyToken=b77a5c561934e089'への参照を追加する必要があります。
私はそれをしなければならないようには思えません。MyILMergedDLL.dll APIを使用する人は誰でも、参照するライブラリへの参照を追加する必要はありません。どうすればこれを回避できますか?
2)マージされたアセンブリを使用する場合にのみTypeLoadException
編集:これを超えて、MyILMergedDLL.dllを使用するコンシューマープロジェクトにへの参照を追加した場合でも、System.Xml
MyILMergedDLL.dllのコードを使用すると、次の例外が発生します。
System.TypeLoadException:アセンブリ'MyILMergedDLL、Version = 1.0.1.1、Culture = neutral、PublicKeyToken=...'からタイプ'System.Func`2'を読み込めませんでした。
これは私の消費者プロジェクトのコードです。を引き起こした行TypeLoadException
は2番目のものです:
Row
をスローする特定のコンストラクターTypeLoadException
は、のパブリッククラスで定義されておりMyILMergedDLL
、個々のプロジェクトDLLを参照するときにこのコンストラクターを使用すると、正常に機能します。例外が発生するのは、ILマージされたDLLを参照するときにこのコンストラクターを使用する場合のみです。何が起こっているのかわかりません。
そのコンストラクターは次のとおりです。
そしてbase
それが参照しているはこのコードを持っています:
c# - 単一ファイル アプリケーションをビルドする
2 つのファイルをマージしようとしています。1 つは .net3.5 wpf アプリケーションで、もう 1 つはWPF 通知アイコン dllです。
次のコマンドを使用します。
しかし、結果アセンブリを起動すると、アプリケーションがこのエラーでクラッシュします
EventType : clr20r3 P1 : ps.exe
P2 : 1.0.0.0 P3 : 4c0ee52f P4 : presentationframework P5 : 3.0.0.0 P6 : 4938d608 P7 : 9a1 P8 : 46 P9 : system.io.ioexception
なんで?また、単一ファイルのアプリケーションを構築するにはどうすればよいですか?