Visual Studio 2010が突然名前空間を認識できなくなりましたか?


83

私のC#WinFormsソリューションには2つのプロジェクトがあります。私が取り組んでいるメインプロジェクトであるDLLと、DLLを一度に簡単にコンパイル/実行/デバッグできるように「サンドボックス」と呼ぶ実行可能WinForms。

私は両方のプロジェクトで.Net4.0で作業しています。

一見無害に見えるコードと、DLLにSystem.Webへの参照を追加するまで、すべてが正常に機能していました。これで、サンドボックスプロジェクトはDLLプロジェクトの名前空間を見ることができません。これに影響を与えるはずだったと思うものは何も変更しませんでした。

DLLへのプロジェクト参照をサンドボックス参照から削除して再度追加すると、赤い下線がすべて消え、すべてのクラスなどで色分けが返されます。しかし、私がソリューションを構築しようとするとすぐに、すべてが再び崩壊します。

サンドボックスの参照でDLLプロジェクトを右クリックし、オブジェクトブラウザーで表示すると、名前空間とそこにあるすべてのものが表示されます。

これはある種のバグかもしれないと私は感じていますか?

これはVS2010のバグのようなものですか?数か月前に同じ問題が発生しましたが、当時はまったく新しいプロジェクトを作成してファイルを再インポートすることでしか修正できませんでした。ただし、今回は数百万のファイルがあり、最後の手段としてのみ実行します。

編集:パニックになってすべての変更をやり直し、問題の原因を見つけようとした後、次の行のようです:

string url = "http://maps.google.com?q=" + HttpUtility.UrlEncode(address);

この行をコメントアウトすると、名前空間エラーは発生せず、プロジェクトは正常にビルドされます。しかし、この行には何の問題もありません。

回答:


149

私はこれをVS2010のバグと宣言する準備ができています、これはすでにあまりにも多くのプログラマーを噛んでいます。修正は簡単です。[プロジェクト+プロパティ]の[アプリケーション]タブで、デフォルトで選択されているクライアントプロファイルではなく、ターゲットフレームワークを「.NETFramework4」に変更します。

System.Webはクライアントプロファイルに含まれていません。そもそもこのオプションを使用するのは非常にばかげています。クライアントプロファイルは、フルバージョンの.NET 4.0よりもわずか15%小さいだけです。デフォルトで選択するのはさらにばかげています。しかし、私は逸脱します。

更新:ありがたいことに、これはすべてVS2012で修正されました。これにより、クライアントプロファイルが新しいプロジェクトのデフォルトになりなくなりました。そして、クライアントプロファイルは.NET4.5で完全に廃止されました。


1
それをありがとう。DLLが.Net4.0に設定されていましたが、サンドボックスが.Net4.0クライアントプロファイルに設定されていました。このプロジェクトに5か月間取り組んだ後、理由もなくすべてが崩壊したときに私が受けたパニックの量...少なくとも次回はわかります!
オザ2011

27
このような答えは、このサイトの本物の肉とジャガイモです。私の人類への信仰はわずかに高まり、私のプロジェクトはついに完成しました。ありがとう。
CloudMeta 2011年

1
すべてのプロジェクトでターゲットフレームワークを4.0に変更しましたが、依存するプロジェクトの名前空間がまだ見つかりません。他に確認する必要があるものはありますか?
Steven Ryssaert 2011

@ UwConcept-これはバージョン番号ではありません。それは完全対クライアントプロファイルについてです。それでも問題が解決しない場合は、独自の質問を開始してください。
ハンスパッサン2011

@HansPassantはい、質問がわかりにくい場合は申し訳ありません。4.0クライアントバージョンを使用していて、それを4.0に変更しました。それでも、私のソリューションの他のプロジェクトの名前空間は、プロジェクト間で見つかりません。
Steven Ryssaert 2011

8

両方のプロジェクトがターゲットフレームワークに非クライアントプロファイルを使用していることを確認してください(これを行うには、各プロジェクトのプロパティに移動します)。


マークに感謝します。あなたとハンスはそれを頭に釘付けにしました、これはそれを修正しました。
オザ2011

2

1つの可能性は、クラスライブラリのターゲット.NETFrameworkバージョンがプロジェクトのバージョンよりも高いことです。私はこの問題に直面し、ビジュアルスタジオを閉じ、ビジュアルスタジオを再開し、ソリューションをクリーンアップして再構築することで問題を解決しました。これは私のために働いた。他のいくつかの投稿では、私は返信を読み、ほとんどのユーザーはこの方法に従って問題を解決しました。


1
この質問は、4年半以上前にすでに十分に回答されています。
オザ2015年

+密接に関連するバグに関する有用で有用な情報を追加するため
Eric Brown – Cal

@Ozzahは、2017年にこのバグを調査している人として、より多くの情報を得ることができて本当にうれしいです。+1
カウトゥルフ2017年

1

最初にSandboxdllを使用してプロジェクトのみを個別にビルドしてみてください。

次に、実行可能プロジェクトで必要なdllを指定し、copy localがに設定されていることを確認します。trueいるます。参照設定で。

次に、実行可能プロジェクトをビルドします。


そして、聖なるものすべてを愛するために、ターゲットタイプがコンテンツではなくコンパイルに設定されていることを確認してください(私のものは何らかの理由で)
jcolebrand 2012年

0

ターゲットフレームワークを「.NETFramweork4クライアントプロファイル」から「.NETFramework4」に変更すると、同様の問題が発生しました。私は、クライアントプロファイルがそれを使用することにあまり利点がないように思われることに同意します。Visual Studioがデフォルトでクライアントプロファイルに設定されていることを思い出すまで、私が探している奇妙なエラーに釘付けになっているようです。エラーが発生したときの話の教訓は、「ソリューションの再構築」が機能しない場合は、ターゲットフレームワークを確認することだと思います...


0

すでにフレームワークの変更を試みても機能しない場合は、これが(私と同じように)機能することを願っています。プロジェクト内から必要な参照を追加するだけです。非常に明白ですが、問題が何であるかがわかるまで、私はそれを間違っていました。


0

この問題が発生したばかりで、同じオブジェクト名を持つ複数の名前空間が使用されていることが判明しました(つまり、ビジネスオブジェクトはmvcモデルと同じ名前でした)。

名前を完全に修飾すると、問題が修正されました。

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