web-dev-qa-db-ja.com

参照されていないアセンブリで定義されたC#タイプ

2つのプロジェクトAとBがあります。プロジェクトAはプロジェクトBでタイプXを使用しているため、AにBへの参照が追加されています。すべてが正常に構築されています。

強力な名前付きキーファイルを使用してプロジェクトBに署名しました。すべてがまだうまく構築されています。

次に、Bの厳密な名前付きキーファイルを変更することにしました。プロジェクトBokを再構築しました。プロジェクトAIをビルドしようとすると、「エラー1タイプXは、参照されていないアセンブリで定義されています。アセンブリB、バージョン= 1.0.0.0、カルチャ=ニュートラル、PublicKeyToken = 95b41b0d6571627b 'への参照を追加する必要があります。 「」

そこで、プロジェクトAの参照を削除して、再度追加しました。喜びはありません。プロジェクトAのプロジェクトB参照をダブルクリックし、オブジェクトブラウザーを開いて、そこにタイプXが表示されていることを確認できます。また、AのタイプXオブジェクトを完全に修飾し、インテリセンスがそれらを正常に取得しましたが、それでもビルドされません。

キーファイルを変更するとリビジョンを上げる必要があるかもしれないと思ったので、アセンブリBのバージョンを2.0.0.0に変更しましたが、それでもAはバージョン1.0.0.0が必要だと文句を言います。 AのB参照のプロパティを見ると、間違いなく正しいバージョンを示しており、実際には2.0.0.0と表示されます。

既存のキーファイルを使用して生きることはできますが、可能であればどこが間違っているのかを理解したいと思います。

13
CSharpHolder

コメントであなたが言ったことに基づいて、私はそれがプロジェクトAで最も間違いなく何かであると言うでしょう。

おそらく、これらの手順はそれを修正するのに役立ちます:

  1. プロジェクトBへの参照を削除し、保存します
  2. メモ帳などで.csprojファイルをクラックして開きます
  3. そこでプロジェクトBへの参照(おそらくヒントパスノード)を探し、ノードを削除します。
  4. プロジェクトAがたまたまASP.NETプロジェクトである場合は、web.configまたはaspxページヘッダーでプロジェクトBへの参照を探してください。

プロジェクトへのすべての参照を削除したら、ボトルネックの提案に従ってプロジェクトをリロードし、それで問題が解決するかどうかを確認します。

4
Steve Danner

回答が遅れて申し訳ありませんが、これは私を助けました:

(現在AnyCPUソリューションプラットフォームがあると仮定します)

  • ソリューションプラットフォームをx86に切り替えます。
  • コンパイル
  • 元に戻す
  • 再度コンパイルします。
1
Roman Zavalov

グーグルからここに来る人々を助けるために、 マーリンのコメント 遅延について尋ねる-署名は私にとっての答えでした。

アセンブリBで定義されたタイプXを参照する遅延署名されたアセンブリAを参照すると、このエラーが発生しました。Bが参照されていないというエラーが発生しました(すでに署名されたバージョンのBを参照していました)。

修正は、署名されたバージョンのAを見つけて参照することでした。

0
Carl Walsh

xがAを継承する場合は、Bで参照する必要があります

0
May Taha

プロジェクトAのプロジェクトファイル(projectA.csproj)を編集してみてください。 Visual Studioでこれを行うには、プロジェクトを右クリック->プロジェクトをアンロードしてから、アンロードされたプロジェクトを右クリック->ファイルを編集します。そこでプロジェクトBへの参照を検索し、必要に応じて修正してみてください

0
bottlenecked

私にとってうまくいったのは、プロジェクトへの参照を削除してから、再度追加することでした。欠落している3番目のライブラリへの参照が必要であることを示す新しいエラーメッセージが表示されたため、元のメッセージは少し誤解を招くものでした。

0
Norman H