問題タブ [assembly-resolution]
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.
.net - 別のアセンブリ名への BindingRedirect
BindingRedirectを使用して、YourAssembly.dll 1.1.0.0 を 1.2.0.0 にリダイレクトできます。
アセンブリ名が異なる場合、これが可能かどうかは誰にもわかりません。
例えば
YourAssembly1.dll (v1.1) は YourAssembly2.dll (v2.8) にリダイレクトされます
.net - AssemblyResolve メソッド内に追加のコンテキストを含めることは可能ですか?
動機。クライアント/サーバー アプリケーションがあります。ある時点で、サーバー側は特定のメタデータに基づいて新しいタイプを動的に作成しますが、クライアントには使用できません。サーバーは、型のインスタンスをクライアントに送信する必要があります。ただし、インスタンスのタイプが不明であるため、クライアントはインスタンスのデシリアライズに失敗します。
1 つの解決策は、メタデータとデータの両方をまとめてクライアントに送信し、動的な型とインスタンスを再作成させることです。
特定のインスタンスがオブジェクト グラフ内で深くネストされている場合、事態は複雑になります。私がやりたいことは、オブジェクト グラフをそのままクライアントに送信し、逆シリアル化コードで AppDomain.AssemblyResolved イベントを発生させ、そこでそれぞれの動的型を再作成することです。ああ!イベント ハンドラーでメタデータを使用できるようにする方法がわからないため、実行できません。
CallContext を使用してみましたが、うまくいきませんでした。
解決策を探すために使用したサンプルコード全体を次に示しますが、成功しませんでした。
イベント ハンドラでdata
返されるはです。OnAssemblyResolve
null
誰もそれを行う方法を知っていますか?
編集: 2 回の往復で行うことができます。最初にメタデータを渡し、2 番目にオブジェクト自体を渡します。1往復の解決策を見つけたいと思います。
EDIT:2私は絶対にクレイジーな解決策を思いつきました。動作しますが、パフォーマンスへの影響について疑問に思っています。動的型ごとに 1 つの動的アセンブリを作成し、そのアセンブリの名前で型のメタデータをエンコードするとどうなりますか? 私はこのアプローチをチェックしましたが、うまくいっているようです。最大 500 文字の長さのアセンブリ名を取得しました。各アセンブリは、単一のモジュール「DynamicModule」と単一のタイプ「DynamicType」を定義します。それでも私はより良い解決策を楽しみにしています。
c# - プロジェクトを再コンパイルせずに、C#プロジェクトの参照dllをアップグレードします
C#アプリケーションのビルドバージョンを取得し、参照dllの1つを変更する必要があります。これを行うための最良の方法は、参照dllで特定のバージョンをオフにしているのですが、dllを新しいバージョンに置き換えてテストするとすぐに、「ファイルまたはアセンブリXXXXX、バージョン=XXXXXを読み込めませんでした。」が表示されます。ローダーがdllのバージョンを気にしないようにして、dllがロードを試みるようにする方法はありますか?
.net - 参照されるDLLの複数のバージョンがマニフェストに含まれているのはなぜですか?
.Net2.0を対象とするMSBuildv3.5を使用して.Netソリューションを構築しています。
Crystal 11.5を使用するようにアップグレードしているため、ソース管理ツリーのバイナリを更新して、10.0DLLではなく11.5バージョンのDLLを含めました。
プロジェクトでは、いくつかのCrystalReportsDLLを参照しています。プロジェクトファイルの小さな例を次に示します。
しかし、マニフェストを見ると、プロジェクトに2回存在していなくても、ClientDocが2回参照されていることがわかります。
プロジェクト内の参照を変更してバージョン11.5.3300.0を指定し、SpecificVersionをTrueに設定しようとしました。どちらも役に立ちませんが、両方のバージョンを参照するマニフェストを取得します。
両方のバージョンがマニフェストに含まれているのはなぜですか?他のすべてのDLLが同じヒントパスで同じ方法で指定されている場合に、これがClientDoc.DLLでのみ発生するのはなぜですか?
また、この方法で出荷された場合、Fusionは最初にどのバージョンを使用しようとしますか?テストした1台のマシンで、バージョン10.0.3000.0が見つからなかったというエラーが発生する可能性があります...11.5がマシン上にありました。別のマシンでは、問題なく動作しているように見えました。
c# - ロードできないアセンブリの代わりにフォールバック アセンブリを提供するにはどうすればよいですか?
実行時に、参照されたアセンブリが「厳密な名前の検証に失敗しました」などでロードに失敗した場合 (テスト署名されているため)、実際に署名された別のパスから代替アセンブリを提供する方法はありますか?
AppDomain.CurrentDomain.AssemblyResolve にサブスクライブしようとしましたが、技術的に「不良」アセンブリが存在するため、起動されません。ロードできないだけです。
アセンブリを読み込めない場合にフォールバック アセンブリを提供する一般的な方法はありますか?
c# - 複数のAssembly.Load(Byte [])、同じインスタンスまたはリーク?
同じアセンブリを含むByte配列でAssembly.Load(Byte [])を複数回呼び出すとどうなりますか?
呼び出しごとに同じアセンブリのインスタンスを取得しますか?
同じアセンブリがアプリドメイン内で複数回読み込まれました???
.net - アセンブリの読み込み
BINおよびGACからアセンブリをロードする方法を示す議論はたくさんあります...私の質問はより一般的であり、アセンブリのロードがどのように機能するか知りたいです。
例えば
私たちが持つことができるBINフォルダに
.dll.config ファイルは次のようになります。
正しいアセンブリ参照を設定するのに役立ちます。
B.dll を必要とするがバージョンを指定せずに、BIN フォルダーにある B.dll を常に取得する場合は、どうすれば A.dll を作成できるのか疑問に思っていました。
私の質問は、SDK の更新に関するもので、私のすべてのコードはまだ古い SDK バージョンを指しています。アセンブリに、リソース、BIN または GAC のすべてのバージョンの最上位を探してもらい、それを使用したかったのです...
Visual Studioでそれをどのように言えますか? 参照を物理ファイル (バージョン) にのみ追加できます:-(
c# - C#: カスタム アセンブリ ディレクトリ
1 つの実行可能ファイルと 5 つのライブラリで構成されるアプリケーションがあるとします。通常、これらはすべて 1 つのディレクトリに含まれ、ライブラリはそこからロードされます。
たとえば、一部のライブラリを Lib という 1 つのディレクトリに配置し、残りを Lib2 というディレクトリに配置することはできますか? そのため、アプリケーション ディレクトリには実行可能ファイル自体のみが含まれ、他のアセンブリはさまざまな論理ディレクトリに含まれます。
これどうやってするの?また、アセンブリをロードする方法だけでなく、アプリケーションをビルドしてアセンブリを正しいディレクトリに配置する方法も知りたいです。
.net - NUnitアセンブリバージョンのリダイレクトの問題([AssemblyName] .temp.configとは何ですか?)
NUnit2.5.0を使用するSharpArchitectureのテストライブラリの一部を使用していますが、プロジェクトの残りの部分はNUnit 2.5.1を使用しているため、テストプロジェクトアプリの構成ファイルにアセンブリリダイレクトを配置しました。
まだアセンブリリダイレクトバージョンを取得しています:
Fusion ErrorLogを有効にすると、次のように表示されます。
何が得られますか?探しているこのtemp.configファイルは何ですか?実際の設定で表示されないのはなぜですか?
とにかく、ビルド後のイベントに次のものを追加しました。
すべてが正常にコピーされますが、Testdriven.NETでテストを実行するとすぐに、ファイルが消えます。
誰かが私に何が起こっているのかについての手がかりを与えることができますか?
c# - デバッグ エラー「タイプ 'xx' は、参照されていないアセンブリで定義されています」
完全なエラーは次のとおりです。
タイプ 'System.Windows.Forms.Control' は、参照されていないアセンブリで定義されています。アセンブリ 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' への参照を追加する必要があります。
そして、必要のないライブラリ プロジェクトの最初のクラスの最初のステートメント (Debug.Assert 行) を指していますSystem.Windows.Forms
(またはそう思っていました)。私はそれを解決する方法を知っています:言及された参照を追加してください。しかし、どのライブラリがこのエラーを引き起こしているのか、またはコードのどの部分が WinForms ライブラリを使用してトリガーされているのかを調べるにはどうすればよいでしょうか?
通常、他のライブラリを参照するライブラリを追加できますが、これらの他のライブラリへの参照は、実際に使用するときにのみ追加する必要があります。
編集:代替ソリューション
この問題または同様の問題は、Microsoft のフレームワーク ツールのBinding Log Viewer Fuslogvw.exeを使用して解決することもできます。アプリケーションがバインドするアセンブリのすべての試行と成功が表示されます。