問題タブ [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.
msbuild - System.Web.Mvc のイルマージの問題
5 つのプロジェクトをビルドして 1 つの dll にマージするビルド スクリプトがあります。プロジェクトの 1 つに、私の Dependencies フォルダー内にある System.Web.Mvc DLL への参照があります。このファイルを ASP.NET MVC3 フォルダーからプロジェクト フォルダーにコピーしました。
ILMerge を実行した後のエラーは次のとおりです。
なぜ私はこれを得ているのですか?
c# - ILMerge の使用後にアプリケーションがログ記録を停止した
ILMerge を使用したい単一の外部アセンブリ (log4net.dll) を持つ非常に控えめなアプリケーションがあります。App.exe と log4net.dll をマージすると、結果の実行可能ファイル (New.exe) が正しく動作するように見えます。ただし、New.exe はログを記録しなくなり、マージされる前は問題なくログを記録していました。New.exe をテストする前に、App.exe.config をコピーしたことに注意してください。
これをどうすればいいのかわからない。なぜこれが起こるのか誰にも分かりますか?ILMerge.exe を誤って使用したことがありますか? Reflector は、New.exe が「完全」であることを示しているようです。Log4net アセンブリとすべてが表示されます。
visual-studio-2010 - ILMerge を使用した dll のマージ
ILMerge を使用して、いくつかの dll を 1 つのマージ dll にマージしようとしています。ビルド後のコマンドをいくつか試しましたが、何も機能しませんでした。
C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe /lib:C:\Windows\Microsoft.NET\Framework\v4.0.30319
/lib:”C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies”
/t:dll /closed /targetplatform:v4,
”C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0″ /out:DataAccessMerged.dll Frameworks.dll ObservableDictionary.dll
また
などのマクロを配置しTargetDir
ました....
それはうまくいきませんでした。.net フレームワークは 4 私の vs は 2010 SP1 です。
さて皆さん。これが誰かを助けることを願っています。問題はもちろんフレームワーク 4 です。この問題を解決するにはいくつかの方法があります。私の方法は、ILMerge exeにILMerge.exe.configファイルを作成し、このxmlを入力することです
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
</startup>
</configuration>
c# - DLL のマージと名前空間の管理の変更
サードパーティの dllとマージされる単一のdllを作成したいと考えています。これは、エンド コンシューマーが 2 つではなく 1 つの dll のみを処理する必要があることを意味します。
補強のために、サードパーティの dll は nLog であるとしましょう。マージされた dll のコンシューマーがプロジェクトで参照として NLog を既に持っている場合、どのように対処すればよいですか?
理想的には、プロジェクト内の NLog 名前空間を「XyzNLog」に変更することです。これは、ユーザーがエイリアシングを行う必要がないことを意味します...どうすればこれを行うことができるでしょうか?
これで、NLog のプロジェクトにエイリアスを追加して、それを XyzNLog として参照する必要があることがわかりましたが、競合が発生しないように、マージされた dll のコンシューマーにも同じエイリアスを適用したいと考えています。
更新 - 解決策
http://blog.mattbrailsford.com/2010/12/10/avoiding-dependency-conflicts-using-ilmerge/
ビンゴ!したがって、ILMerge を使用することで、サードパーティ ライブラリ DLL をプロバイダー独自の DLL とマージすることが可能になります。つまり、展開する DLL は 1 つだけになります。しかし、それだけではありません。実際にはさらに一歩進んで、ILMerge にすべての依存関係を内部化するように指示できます。これにより、すべてのサード パーティ クラスが内部として宣言されるように変換されます。つまり、これらのクラスは、最終的な DLL 内からのみ使用できます。ウーフー!問題は解決しました =)
これを考えると、私のdllの消費者もNLogを持つことができるという問題がなくなります...参照されているNLogがすべて内部に移行するためです! これはまさに私が欲しいものです。
誰かがこれについてフィードバックや考えを持っていますか?
.net - アンマネージ コードがある場合の BadImageFormatException の回避
Visual Studio からサービスを実行しようとすると、常に BadImageFormatException をスローする Web サービスがあります。 別の質問に対するこの回答では、DLL に対して peverify を実行して、問題があるかどうかを確認することを提案しました。私の Web サービスの DLL は問題ありませんが、Web サービスは ILMerged アセンブリに依存しており、エラーがあります。
[IL]: エラー: [C:\blah\MyILMergedAssembly.dll: 暗号化
Utils.SecureStringExtensions::SecureEquals][オフセット 0x00000055][アンマネージド ポインターが見つかりました] [アンマネージド ポインターが予期されました] スタックに予期しない型がありました。
[IL]: エラー: [C:\blah\MyILMergedAssembly.dll: 暗号化
Utils.SecureStringExtensions::SecureEquals][オフセット 0x0000005D][アンマネージド ポインターが見つかりました][予期されたアンマネージド ポインター] スタックに予期しない型があります。
[IL]: エラー: [C:\blah\MyILMergedAssembly.dll: 暗号化
Utils.SecureStringExtensions::SecureEquals][offset 0x0000007E] アンマネージ ポインターは検証可能な型ではありません。
3 エラー .\MyILMergedAssembly.dll の検証中
(188警告)
これらは、 MyILMergedAssemblyのMarshal
とでの使用に起因すると思いますが、それを行うすべての場所で、メソッドを として宣言しています。peverify が与えるエラーを取り除くにはどうすればよいですか? また、できれば Web サービスを実行しようとしたときに表示される BadImageFormatException を取り除くにはどうすればよいでしょうか?IntPtr
unsafe
編集: ILMerge を使用して、安全でないコードを含むアセンブリをマージできないようです。そのため、Web サービスで MyILMergedAssembly の個々の DLL をすべて参照するようにしましたが、それでも BadImageFormatException が発生します。これで、個々のアセンブリの 1 つで例外が発生します。その個々のアセンブリで peverify を実行すると、次のようになります。
[IL]: エラー: [C:\blah\Connection.dll : 接続
.ConnectionBase::.ctor] [HRESULT 0x80070002] - 指定されたファイルが見つかりません。
それConnectionBase
が参照しているクラスは Connection.dll にあります。または、クラスが Connection 名前空間/プロジェクトで定義されているため、少なくともそうあるべきです。接続のビルド オプションで [安全でないコードを許可する] がオンになっています。ConnectionBase
参照している可能性のあるコンストラクターは、としてマークされていinternal
ます。
編集:安全でないコードで DLL を使用する Web サービス プロジェクトで、「安全でないコードを許可する」をチェックしてみました。compilerOptions="/unsafe"
また、system.codedom > compilers > compiler ノードの Web サービスの Web.config ファイルに追加してみました。ただし、Web サービスを実行すると、次のようなページが表示されます。
ファイルまたはアセンブリ '接続' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。
.net - アセンブリのマージと internal キーワードの使用
アセンブリをマージすると、internal キーワードのスコープが変更されますか?
いずれにせよ、最終的なアセンブリを参照する人は内部クラスにアクセスできないため、効果がない (または少なくとも 1 つが問題になる) ことはないと確信しています。
これは現実世界の価値のない架空の質問かもしれませんが、それでも私は興味がありました.
編集:ソースコードを単一のビルド可能なアセンブリに結合するのではなく、ILMergeを意味します。
c# - 再帰参照エラーを修正/回避/無視しますか?
相互に参照する 2 つのクラス ライブラリが必要です。
なんで?1 つは C# でコンパイルされ、もう 1 つは VB.NET でコンパイルされます。
外部プログラムや拡張フレームワークを必要とせずに、アセンブリをプログラムでマージできればもっと良いでしょう。
.net - ilmerge 後の型の検索
私がアセンブリ 1 とアセンブリ 2 にマージしたとしましょう。
Assembly.GetExecutingAssembly.GetTypes()
マージされたアセンブリを実行するときに、from assembly1を使用して assembly2 の型を検索できますか?
c# - XMLDocs スイッチを使用しても ILMerge は、インテリセンスを持たない dll を生成します
誰かがこれを経験したか、解決策を見つけましたか? 私は次のことを試しました:
- 出力 dll を移動せずに直接参照する
- GAC からの出力 dll のアンインストール
どちらのオプションも違いはありませんでした。生成された XML ドキュメントは dll と同じ名前で、dll に含まれていることに注意してください。
assemblies - 3番目の使用に関する問題。カスタムワークフローに関するパーティアセンブリ(CRM 2011オンプレミス)
3番目のカップルを使いたいです。カスタムワークフローのパーティアセンブリ。カスタムワークフローは、プラグインの登録と同様に正常にコンパイルされます。ただし、これを呼び出すと、アセンブリが見つからないというエラーが発生します。それが不平を言うアセンブリは3番目です。コードと一緒に使用するパーティアセンブリ。ILMergeも例外をスローするため、ILMergeはオプションではありません。問題のあるアセンブリをCRMインストールのbinディレクトリ(CRM 2011 Installation \ wwwroot \ bin)と実際のCRM IISアプリケーションのbin(\ Program Files \ Microsoft Dynamics CRM \ CRMWeb \ bin)に直接コピーしようとしました。役に立つ。
誰かがこれに遭遇しましたか?