web-dev-qa-db-ja.com

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

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

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

using MyLibrary.MyFolder;

それはそれを解決できないと言っており、ReSharperは使用されていないので安全に削除できると言っているだけです。

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

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

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

86
Brandon

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

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

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

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

85
Brandon

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

158
CindyH

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

31
user4847434

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

tools-> options-> resharper-> options-> general-> clear cachesボタンをクリックしてVSを再起動します

8
Rocky

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

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

4
Fedor Steeman

これは、ReSharperの同様の問題のようです。

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

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

ReSharperの場合、特にそのケースに問題があるように聞こえます。

3
KP.

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

2
Alex

この問題がありました。それを理解するのに年齢を要した。手伝ってくれる人がいます。 Visual Studioを再構築、クリーンアップ、再起動しましたが、修正されませんでした。参照を削除して再追加しました...

役に立たない....まで!

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

あなたが私を厳しく判断し始める前に、なぜそれが愚かではなかったのか、そしてこの間違いが最も賢いプログラマーによってさえなされうる理由を説明させてください。

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

例えば.

クラス名: Message.cs

宣言:

public class Massage
{
    //code here

}

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

Mを入力するとクラスが多すぎるため、eと入力しましたが、これは誤って入力されたバージョンには表示されず、コンパイラによってクラスが選択されていないという印象を与えました。

2

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

enter image description here

2
MacGyver

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

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

2
Vilx-

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

1
David

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

enter image description here

0
Manuel Roldan

最近、似たような問題に出くわしました。 Resharper Ultimate 2016.1.2を使用してVisual Studio 2015で作業しています。別のアセンブリからクラスを参照しようとしているときに、コードベースに新しいクラスを追加しようとしましたが、Resharperはそのパッケージに対してエラーをスローしました。

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

必要なネームスペースの前に「global ::」キーワードを追加すると、実際に探しているクラスを参照するのに役立ちました。詳細については、以下のページをご覧ください。

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

0
lumena

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

0
Muhammad Sohail

私のためにちょうど働いた別の可能な修正:

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

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

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

0
KeithS

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

enter image description here

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

それでも解決しない場合は、開いているすべてのファイルを閉じて、Visual Studioを閉じてみてください。次回Visual Studioを開くときに修正する必要があります。この方法で解決される再シャーパーバグがあります。

0

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

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

  1. ソリューションをクリーニングしました。
  2. MVCプロジェクトへの参照を手動で追加しました。
  3. Usingディレクティブを手動で追加しました。
  4. ctrl-shift-b

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

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

これから、ReSharperメッセージを見ると

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

読みます

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

0
Marijn