問題タブ [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.

0 投票する
2 に答える
204 参照

prism - MEFアセンブリのロード宣言

Prismでは、動的にロードされたアセンブリから、ロードアセンブリがいつどのように初期化するかを宣言することができます。つまり、次のクラス属性を配置できます。

[ModuleExport(typeof(MyModule)、InitializationMode = InitializationMode.WhenAvailable)]

これにより、モジュールがロードされるときにモジュールが初期化されます。

MEFでも同じことができる機能を探していましたが、まだあまり詳しくありません。MSDNとドキュメントを検索してみましたが、あまり表示されませんでした。

よろしくお願いします!

0 投票する
2 に答える
2039 参照

.net - 実行時にバインディング リダイレクトを作成することは可能ですか?

アプリケーションが開始されたら、今後のすべてのアセンブリの読み込みに適用されるバインディング リダイレクトを作成する方法はありますか?

0 投票する
3 に答える
8573 参照

c# - C# - 'Resources' DLL が存在しないためロードに失敗する - 参照を見つけて削除するにはどうすればよいですか?

コンパイル時に実行可能なバイナリを吐き出す C# ソリューションがあります。バイナリは、私が作成した別のソリューションの製品であるライブラリに依存しています。すべてのコードは、私が作成したものです。

最近、私はいくつかのプロジェクト設定をかなりでたらめにいじり、CLR によるリンクの構築がどのように機能するかを感じようとしました。残念ながら (予想どおり?) バイナリのリンクを切断することはできましたが、問題を解決する方法がわかりません。

  • バイナリを使用すると、アプリケーションがフォールオーバーする前に次のフィードバックを受け取ります

アセンブリを読み込んでいます....アセンブリ MY.Library に型を追加できませんでした、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null - 要求された型の 1 つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください

  • MY.Library.resources DLL の Fusion ログは以下のとおりです。上記のバイナリは存在せず、どこで、なぜロードしようとしているのかわかりません。

>

  • 「リソース」DLL は暗黙的ですか? それとも、必ずこの DLL への参照を持っているのでしょうか? SLN でライブラリの参照を見つけるにはどうすればよいですか?

TL;DR

  • 存在しないリソース DLL への参照を削除するにはどうすればよいですか?
0 投票する
1 に答える
2534 参照

webforms - PortableLibraryファイルまたはアセンブリを読み込めませんでした

PortableLibraryプロジェクトを参照するasp.net4webformsWebサイトがあります。Webサイトでは、PortableLibraryからクラスをシリアル化します。IIS6を使用してプロジェクトをWebサーバーマシンにデプロイすると、次のエラーが発生します。

ポータブルライブラリプロジェクトはSystem.Xml(v4.0.31029)を参照します。

文字列オブジェクトを単純にシリアル化するだけで、参照なしでクリーンなプロジェクトをデプロイしようとすると、正常に機能しました。

Web構成でアセンブリバインディングを試しましたが、成功しませんでした。

なぜこのエラーが発生するのですか?system.xmlの「2.0.5.0」バージョンがどこから来るのかわかりません。

0 投票する
2 に答える
459 参照

maven - さまざまな展開シナリオで推移的な依存関係を持つ Maven アセンブリを作成する方法は?

アプリケーション サーバー内で使用するプロジェクトとスタンドアロン アプリケーションとして使用するプロジェクトのビルドを調整する際に問題があります。

全体的な状況を単純化するために、3 つのプロジェクト A、B、C があるとします。

プロジェクト A は、プロジェクト C に依存するプロジェクト B に依存します。

プロジェクト C には依存関係 X があり、たとえばアプリケーション サーバー内で JEE ライブラリとして利用できると予想されていたため、提供済みとしてマークされています。つまり、jms.jar です。

そのため、プロジェクト A のアセンブリ ビルドを実行すると、期待どおりに提供されているとマークされているものを除いて、すべての推移的な依存関係が取得されます。

現在、プロジェクト A をスタンドアロン環境、つまりアプリケーション サーバーの外部で使用する必要がある新しい展開シナリオがあります。

したがって、jms jar をコンパイルの依存関係にする必要があります。これは、プロジェクト A で X のコンパイル依存関係を明示的に追加する必要があるということですか? これはデメテルの法則、つまり見知らぬ人と話すな、という意味で、プロジェクト A はプロジェクト C について明確に知っているべきではなく、プロジェクト B についてのみ知っているべきであるという意味に違反していませんか?

これは単純な例ですが、実際には複数の依存関係があり、提供済みとしてマークされていますが、コンパイルまたはランタイムの依存関係にする必要があるため、maven アセンブリ プラグインによって生成されるアーティファクトになります。

これは Maven の根本的な問題ですか、それともツールを正しく使用していませんか?

ご指導いただきありがとうございます。

0 投票する
1 に答える
531 参照

.net - 実行時に AssemblyQualifiedName で Type を取得しようとしたときの奇妙な動作

NetDataContractSerializer を使用して型を逆シリアル化しようとすると、 FileLoadException が発生します。

指定されたアセンブリ名またはコードベースが無効でした。(HRESULT からの例外: 0x80131047)

このエラーは、特にシリアライザーとは関係ありません。アセンブリ修飾名によって実行時に型を読み込もうとすると、同じ失敗が発生します。

AssemblyResolve イベントにリスナーをアタッチして、何が起こっているかを確認しました。

名ばかりの「奇妙な動作」は、ハンドラーを介してデバッグすることで確認できます。tryGet決して(このnull場合、必要なアセンブリは常に AppDomain に読み込まれます) ことはありませんが、そのままにしておくと、操作は常に失敗します。 つまり、呼び出すType.GetType(e.Name).Assemblyと、FileLoadException がスローされます。 編集:アセンブリの厳密な名前を型のアセンブリ修飾名と混同していました。そのバグは無視してください。皮肉なことに、別のエラーはスローされないため、この質問をする前にこれをキャッチできませんでした。

別の情報: Assembly.Load(e.Name)常に有効なアセンブリを返します。逆シリアル化中に舞台裏で使用される方法が失敗するのに、なぜそれが機能するのかわかりません。

Fusion Log は、ローダーが正しいアセンブリを読み込もうとしていると報告していますが、実行可能ファイルのプライベート パス内にアセンブリが見つからないため、失敗しています。

アセンブリが既に AppDomain に読み込まれているのに、アセンブリを読み込もうとするのはなぜですか??


Fusion ロギングの詳細...

例外がスローされる原因となるメソッド呼び出しの前と呼び出し中に、すべてのアセンブリの読み込みをキャプチャしました。関連するログを作成順に示します。

  • 部分バインディングに失敗しました
    • 名前だけでアセンブリを読み込もうとしました
    • アプリベースのみを調査
  • LoadFrom による部分バインディング SUCCEEDED
    • Where-ref バインド。Locationは、ファイルが参照されている場所を指します
    • ソリューションに参照をロードするときにVSがLoadFromを使用すると思います
  • 厳密な名前のバインドに失敗しました
    • この読み込み試行のトリガーとなった原因は不明です
    • アプリベースのみを調査

AFAICT、Visual Studio はアセンブリをソリューションの AppDomain に読み込みます (ffs、ロードが試行された AppDomain を Fusion Log がキャプチャしてほしいと思います。結局のところ、呼び出し元のアセンブリを記録します)。

この後、逆シリアル化呼び出しを行います。結果は、Fusion の単一のログです。

バインド結果: hr = 0x80070002。システムは、指定されたファイルを見つけることができません。

ここでも、Fusion は実行可能ファイルのアプリケーション ベースから厳密な名前でロードしようとしています。1つの良いこと。GAC からロードしようとするため、展開すると同じ問題が発生しない可能性があります。しかし、アセンブリが appdomain に見つからない理由については、まだわかりません。


さらに興味深いもの...

これにより、Deserialize の呼び出しがスローされます。

ここで、ToXml と FromXml はどちらも NetDataContractSerializer と Write/ReadObject を使用します。アセンブリは、パッケージのインストール ディレクトリから実行の早い段階で読み込まれますが、NDCS は、何らかの理由で、AppDomain で見つかったアセンブリを使用したくありません。このテストは、バージョン管理の問題ではないことを示しています。

0 投票する
4 に答える
1287 参照

c# - AssemblyResolve にロードされた他のアセンブリで宣言された型のフィールドを持つオブジェクトの逆シリアル化エラー

(BuildAction: Embedded Resource を介して) 参照されたアセンブリ (ClassLibrary1 と呼ばれる) を内部に埋め込み、それを AppDomain.CurrentDomain.AssemblyResolve イベントにロードするアプリケーションがあります。メイン アセンブリはクラス Class1 を定義します。

ClassLibrary1 で定義された Class2 型のプロパティがあります。Class2 の定義:

メイン メソッドでは、新しい XmlSerializer(typeof(Class1)) を作成しています。

プログラムの実行中に、次のエラーが発生します。

一時クラスを生成できません (結果 = 1)。エラー CS0012: 型 'ClassLibrary1.Class2' は、参照されていないアセンブリで定義されています。アセンブリ 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c06f123f2868e8c8' への参照を追加する必要があります。エラー CS0266: 型 'object' を 'ClassLibrary1.Class2' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)

何か案は?

コードの残りの部分:

更新: Microsoft Connect サイトにバグを作成しました。サンプルの Visual stuido 2010 ソリューション (詳細フィールドグループを展開するだけ) をダウンロードして再現することもできます。

0 投票する
1 に答える
419 参照

.net - .NET アセンブリ バインド

アプリケーション MyApplication によって消費される API MyApi があります。

MyApi には、.NET 4.0 クライアント プロファイルを対象とするいくつかの dll があります。例えば:

  • MyApi.Core
  • MyApi.ドメイン
  • MyApi.プロバイダー

(およびその他)

展開を簡単にするために、これらは ILMerged に組み込まれています

  • MyApi.ClientProfile

すべての MyApis dll には厳密な名前が付けられています。

MyApplication のすべてのプロジェクトは MyApi.ClientProfile を参照します。

現在、いくつかの Web 機能を MyApi に追加しているため、.NET 4.0 拡張プロファイルをターゲットとする dll MyApi.Web を追加しました。MyApi.Web は、MyApi.Core と MyApi.Domain (および System.Web dll) を参照します。

MyApplication.Web プロジェクトもあります。MyApplication の他のプロジェクトを参照します (MyApi.ClientProfile dll への参照があります)。MyApplication.Web プロジェクトは MyApi.Web dll を参照する必要があります。

これどうやってするの?

MyApplication.Web から MyApi.Core と MyApi.Domain への参照を追加すると、MyApplication.Web の複数のアセンブリに存在する型が存在します。

MyApplication.Web から MyApi.Core および MyApi.Domain への参照を追加しないと、MyApi.Core または MyApi.Domain が見つからないため (MyApi.ClientProfile のみが存在するため)、MyApi.Web はロードに失敗します。

アセンブリ解決イベントを処理できず、MyApi.Core/MyApi.Domain の要求を MyApi.ClientProfile にリダイレクトできません。これは、MyApi アセンブリがすべて厳密な名前であり、失敗するためです。

MyApi.Web を MyApi.ClientProfile にマージできません。これは、MyApi.ClientProfile が .NET 4.0 クライアント プロファイルでサポートされている必要があるためです (また、MyApi.Web には System.Web などへの参照が含まれています)。

MyApi.Web を MyApi.ClientProfile を参照するように変更すると、この 1 つのケースでは機能するはずですが、MyApi.Core と MyApi.Domain を直接参照する別のアプリケーションでは機能しないため、理想的ではありません。

MyApplication.Web にその構成で bypassTrustedAppStrongNames を指定するように強制したくありません (MyApi.Web から何らかの方法でこの設定を直接有効にすることは、受け入れられるオプションかもしれません....)。

だから、私はこの問題に対する適切でエレガントな解決策を考えています。

助言がありますか?

ありがとう。

0 投票する
1 に答える
2393 参照

.net - .NET 3.5 および .NET 4.0 アセンブリを FxCop コード分析に追加する方法は?

.NET 3.5 SP1 をターゲットとするプロジェクトと、.NET 3.5 ライブラリに依存する .NET 4 をターゲットとするその他のプロジェクトを含むソリューションを分析したいと考えています。

.NET 3.5 用と .NET 4 用の両方のアセンブリを追加しようとすると、FxCop は例外をスローします。

バージョン 4.0.0.0 のみを使用するように FxCop に指示する方法はありますか?

0 投票する
2 に答える
449 参照

asp.net - プロセスのビット数に応じて、32ビットまたは64ビット固有のdllを使用する

2つのバージョン(1つは32ビット用、もう1つは64ビット用)で利用可能なDLLを参照する必要があります。私の目標は、32ビットシステムと64ビットシステムの両方で動作するWebアプリケーションを構築することです。

デフォルトで32ビットアセンブリを参照し、AssemblyResolveイベントを使用して64ビットバージョンをロードすることを考えました(32ビットバージョンのロードに失敗した場合)。

ただし、BadImageFormatExceptionが発生した場合でも、_AssemblyResolveハンドラーは呼び出されません。提案された動作を実現する他の方法はありますか?