クラスライブラリを参照できないのはなぜですか?


86

Visual Studio2008のWebサイトとクラスライブラリを含むソリューションがあります。

次に、クラスライブラリを参照する必要があるソリューションの外部に別のWebサイトプロジェクトがあります。Binフォルダーまたはプロジェクトを右クリックして[参照の追加]を選択し、[クラスライブラリプロジェクト]を選択すると、クラスライブラリに必要な15個程度のDLLがWebサイトのbinフォルダーに追加されますが、.csファイルはいずれもusingステートメントを認識しません。

using MyLibrary.MyFolder;

それはそれを解決できないと言っています、そしてReSharperはそれが使われていないのでそれが安全に取り除かれることができると言っています。

ReSharperは、参照が必要であることを認識し、「MyLibraryを参照してMyFolderを使用する」ことを提案します。すでに持っている参照を追加することを提案している理由がわかりません。私が提案に行くとき、私はエラーを受け取ります

「参照モジュールに失敗しました。おそらく、参照によってプロジェクト間の循環依存関係が生成されます。」

Webサイトのプロパティページに移動し、すべての参照を削除して再度追加しようとしましたが、同じエラーが発生します。これが機能しない理由はありますか?


クラスライブラリの.netフレームワークのバージョンと参照しているプロジェクトを確認してください
Manideep Innamuri 2018

回答:


164

また、新しいソリューションのプロジェクトが、含めようとしているプロジェクトと互換性のあるフレームワークに対して実行されていることを確認してください。3.5プロジェクトに4.0プロジェクトへの参照を含めようとしていました。


3
称賛!私は自分のソリューションを4.5として構築し、それを4.0にリンクしていました。現在の4.0要件のため、新しいソリューションを4.0にダウングレードしましたが、他のプロジェクトはそれに対して問題なく構築できます。私が正気を保つのを手伝ってくれて+1!
デビッドピーターソン

1
私はこのプロジェクトでこれまでの多くの障害を克服しましたが、このエラーが発生したときにタオルを投げようとしていました。あなたはそれを保存しました、ありがとう!
トニーD

1
この方法で問題が解決されるとは思っていませんでした。Cool enuf
Irfaan

1
次に、Microsoftはこれを言い、それらすべてを同じバージョンにするオプションを含める必要があります。
PRMan 2017

1
私の日を救った!VisualStudioは、そのことを思い出させるアラートを発することさえしませんでした:(
Reuel Ribeiro

86

私はこの問題を修正する方法を見つけました(少なくとも私にとっては)。なぜそれが機能したのか、私にはわかりませんが、機能しました。(同じ問題が発生している2番目のWebサイトに対して試したところ、次の解決策も同様に機能しました)。

プロジェクトの通常のクリーニングと再構築を試し、すべてのVisual Studioインスタンスをシャットダウンして再起動し、コンピューターを再起動しようとしました。

実際に機能したのは、Visual Studioでプロジェクトを開き、開いているすべてのタブを閉じてから、シャットダウンすることでした。

重要だとは思わなかったのでタブを開いたままにする前(そして使用しているタブを閉じることはほとんどありませんでした)。


VSを再起動するだけでうまくいきました。その問題の原因は、R#のバグをトリガーするプロジェクト/名前空間の名前変更リファクタリングでした。
mbx 2012

それは私にとってもうまくいきました。あなたが言ったようにすべてのタブを閉じてから、IDEと出来上がりを再起動しました。これで、クラスライブラリを参照できます。ありがとうございました。
YUVA

31

1つの可能性は、クラスライブラリのターゲット.NETFrameworkバージョンがプロジェクトのバージョンよりも高いことです。


8

私も同様の問題を抱えていましたが、すべての参照がResharperによって盗聴されます-私のために働いた解決策は、ResharperキャッシュをクリアしてからVSを再起動することです

ツール->オプション->リシャーパー->オプション->一般->キャッシュのクリアボタンをクリックして、VSを再起動します


4

同様の問題が発生し、VSがビルドされる場合とビルドされない場合がありました。何度か検索して試したところ、異なるライブラリ( 'FileManager')に同じ名前のクラスへの参照があいまいであることがわかりました。ビルドされないプロジェクトは、ソリューション内のすべてのモジュールを参照する単体テストでした。特定のモジュールへの参照を強制することで、物事が整理されました。

私のポイントは、ReSharperやVSを非難するのではなく、何らかの循環参照が実際にないかどうかを再確認することをお勧めします。多くの場合、異なるモジュールで同じ名前のクラスは混乱を引き起こす可能性があり、(私の場合のように)悪い設計の症状であることがよくあります。


+1私の場合、名前空間が異なる2つのプロジェクトが同じ名前(Visual Studioの[アプリケーション]タブのアセンブリ名)の.exeにコンパイルされました。移行プロジェクトがあるため、これは(ある程度)意味があります。コマンドラインからのMSBuildは、あまり役に立たない手がかりを1つ与えてくれたので、しばらく疑問に思いましたThe type or namespace name 'A' does not exist in the namespace 'B'。注何の警告はこのために出てくるていないことを...
Jonno

3

これは、ReSharperの同様の問題のように聞こえます。

http://www.jetbrains.net/devnet/thread/275827

スレッドのあるユーザーによると、ビルドを強制すると、最初のビルド後に問題が修正されます(CTRL + Shift + B)。

特に彼らの場合、ReSharperの問題のように聞こえます。警告や誤ったエラーの可能性に関係なくビルドを試みましたか?


私は以前にそれを見つけました。そして、それを構築することで問題が「修正」されたかどうかはわかりません。コンパイルは行いますが、ステートメントやクラスなどを使用して、クラスが認識されないものとして表示されます。ただし、意図的にメソッド呼び出しを中断すると、パラメーターリストが表示されなくても、VisualStudioはエラーを認識しているように見えます。ReSharpersのせいだと思います。
ブランドン

3

どちらも同じソリューションであるため、DLLへの参照を追加する代わりに、クラスライブラリプロジェクト自体への参照を追加します([参照の追加]ダイアログには、このためのタブがあります)。

ああ、それは別の解決策です。それを逃した。プロジェクトへの参照を追加する代わりに、クラスライブラリのコンパイル済みDLLへの参照を追加してみてはどうでしょうか。[参照の追加]ダイアログには、これを行う[参照]タブがあります。


1
これは私にとってはうまくいきました。他のソリューションは参照を追加することを提案しましたが、何らかの理由で、ソリューションエクスプローラーでメインプロジェクトを右クリックするまで参照が見つかりませんでした。
ralpharama 2017

3

同じバージョンのasp.netが使用されていることを確認した後。プロジェクトを削除しました。ソリューションをクリーンアップし、プロジェクトを再度追加しました。これは私のために働いたものです。


私は同じ問題を抱えていました、そしてこれは助けになったようです。かなり奇妙です。
inexcitus

2

同じソリューション内のプロジェクトのアセンブリを参照している場合は、\ bin \ Debug(または\ bin \ Release)フォルダー内のdllを参照するのではなく([プロジェクト]タブを使用)、プロジェクト参照を追加します( 「参照」タブ)。以下のスクリーンショットを参照してください。外部アセンブリと見なされる場合にのみ、assembly / dllファイルを参照します。

ここに画像の説明を入力してください


2

プロジェクトの* .csproj.user(resharperファイル)を削除してから、すべてのタブを閉じて再度開きます。その後、プロジェクトをコンパイルすることができ、再シャーパーの警告はありませんでした。


これを実行して、アセンブリ情報を表示するインテリセンスを取得しましたが、再コンパイルしようとするとすぐに、そのアセンブリのインテリセンス情報が消去され、ビルドが失敗しました。これは1つの奇妙なエラーです!
デビッド・ピーターソン

また、プロジェクトを最初から再作成する必要がありました...比較的新しいプロジェクトでNuGetに数回から多数のアンインストール/インストールを行ったと思います。
Adam Nofsinger 2015年

参照の削除と再作成は私にとってはうまくいきました。プロジェクトファイル全体の削除はやり過ぎかもしれません。
danjuggler 2016年

2

私はこの問題を抱えていました。理解するのに何年もかかりました。肩越しに助けてくれる人がいました。Visual Studioを再構築、クリーンアップ、再起動しましたが、修正されませんでした。参照を削除して再度追加しました...

すべて無駄に....まで!

私の問題の解決策は、クラス宣言のスペルが間違っていたことです。

私を厳しく判断する前に、なぜそれが愚かではなかったのか、そしてなぜこの間違いが最も知的なプログラマーでさえも犯される可能性があるのか​​を説明させてください。

名前の早い段階で間違いがあったため、入力を開始したときにインテリセンスクラスのリストに表示されませんでした。

例えば

クラス名: Message.cs

宣言:

public class Massage
{
    //code here

}

一見、小さなフォントで、マッサージはメッセージと同じように見えます。

Mと入力すると、リストされるクラスが多すぎるため、タイプミスしたバージョンには表示されなかったeと入力しました。これにより、クラスがコンパイラーによって取得されていないように見えました。


つまり、基本的にタイプミスがありました。それは他の人にはあまり役に立ちません。
TylerH

0

VS 2010で、MVC2アプリケーションのテストプロジェクトを作成するときに同様の問題が発生しました。症状は同じでした。

ReSharperからのメッセージはやや誤解を招くものでした。しばらくの間、私はReSharperを完全に無視し、それを「手動VS方式」で実行しました。

  1. 私は溶液をきれいにしました。
  2. MVCプロジェクトへの参照を手動で追加しました。
  3. usingディレクティブを手動で追加しました。
  4. ctrl-shift-b

この段階で、コンパイルエラーが発生しました。System.Web.Mvcテストプロジェクトでアセンブリを参照する必要がありました(ため息)。この参照を追加すると、プロジェクトがコンパイルされます。ReSharperの問題は残っていますが、ReSharperテストランナーは機能します。

VSを再起動すると、ReSharperエラーもなくなります。再起動が必要かどうかはわかりません。.csファイルを閉じるだけで十分な場合があります。

これから、ReSharperメッセージが表示されたら

モジュールの参照に失敗しました。おそらく、参照はプロジェクト間の循環依存関係を生み出します。

読みます

モジュールの参照に失敗しました。おそらく、参照によってプロジェクト間に循環依存関係が生成されるか、参照の依存関係の依存関係への参照がいくつか欠落しています。


0

私のために働いた別の可能な修正:

アセンブリBを参照するアセンブリAがあり、どちらも非プロジェクト(外部)アセンブリXを参照していて、アセンブリBのコードがXを参照していることを認識しない場合は、次の手順を順番に試してください。

  • AとBの両方からXへの参照を削除します
  • BでXへの参照を再作成します
  • AでXへの参照を再作成します

どうやら、VSは、すでに外部を参照している別のプロジェクトの依存関係であるプロジェクト内の外部アセンブリへの参照を認識しません。参照をゼロから再設定することで、これを克服できます。それは非常に奇妙です。


興味深いですが、VS2015では真実です。ありがとう!
スコットニムロッド

0

私はこの問題に直面し、ビジュアルスタジオを閉じ、ビジュアルスタジオを再開し、ソリューションをクリーンアップして再構築することで問題を解決しました。これは私のために働いた。


0

TFSを使用している場合、最新の取得(再帰的)の実行が常に機能するとは限りません。代わりに、[ソース管理] => [特定のバージョンを取得]をクリックしてから両方のボックスをクリックして、最新の取得を強制します。これはうまくいく傾向があります。

ここに画像の説明を入力してください

それでも機能しない場合は、suoファイル(通常はソリューションと同じ場所にあります)を削除すると、Visual Studioはソースからすべてのファイルを取得します(その後、suoファイルを再構築します)。

それでも問題が解決しない場合は、開いているすべてのファイルを閉じて、VisualStudioを閉じてみてください。次にVisualStudioを開くと、修正されるはずです。この方法で解決されるresharperバグがあります。


0

私は最近、同様の問題に遭遇しました。Visual Studio2015でResharperUltimate2016.1.2を使用しています。別のアセンブリからクラスを参照しようとしているときに、コードベースに新しいクラスを追加しようとしましたが、Resharperはそのパッケージに対してエラーをスローしました。

同僚の助けを借りて、参照されたクラスがグローバル名前空間に存在し、現在の名前空間に存在する同じ名前の別のエンティティによって非表示になっているため、新しいクラスからアクセスできないことがわかりました。

必要な名前空間の前に「global ::」キーワードを追加すると、実際に探していたクラスを参照するのに役立ちました。これについての詳細は、以下のページにあります。

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx


0

両方のプロジェクトが同じソリューションに含まれている場合、コンパイルされたdllではなく、必要なプロジェクトの参照を追加すると、より適切になります。

ここに画像の説明を入力してください


-1

残念ながら、私にとってうまくいったのは、クラスファイルを一時的に別の場所にコピーした後、クラスライブラリプロジェクトを完全に削除して再作成することだけでした。そうして初めて、ASP.NetWebプロジェクトusingはクラスライブラリプロジェクトを参照するステートメントを認識します。これは、ReSharperを使用せず、Visual Studio2010で発生しました。


-1

同様の問題がありました。私にとってうまくいったのは、ビジュアルスタジオから間違ったクラスライブラリを追加したことです。VisualStudioの検索機能を使って追加しました。

私がする必要があったのは、新しいプロジェクトの追加>ビジュアルC#>クラスライブラリでした。そして、この新しく追加されたクラスライブラリは正しいものであり、任意のプロジェクトへの参照として追加できるようになりました。


-4

インポートする必要のあるクラスライブラリへの参照追加するのを忘れる可能性があります。

インポートするクラスライブラリ(インポートされた複数のクラスライブラリを含む)を右クリックし、->追加->参照(プロジェクトの選択->ソリューション->インポート元のクラスライブラリの選択-> OK)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.