web-dev-qa-db-ja.com

タイプまたは名前空間<blah>は存在しません

わかりました。これは100万回前に受けたことがあり、100万回+1回回答されています。

それでも、もう一度。 A、B、Cの3つのプロジェクトがあり、それぞれDLLです。各プロジェクトは.Net 4.0です(クライアントビルドではなく、フル4.0)。プロジェクトCはAおよびBを参照します。これらはプロジェクトとして参照され、出力はローカルにコピーするように設定されています。

Cでは、.csファイルに2つのusingステートメントがあります。

using A;
using B;

コンパイルすると、Bが見つからないという苦情が出ます。Aは問題ありません。 BはAに依存します。

一体何をすべきでしょうか?私は削除して再追加し、VS2010を閉じ、再度開き、.csprojファイルを調べました。そして、私はそれを得ることができません。繰り返しますが、100万回目です。

誰かが私に十分な感覚を私に打ち明けて、私がこれの根源を一度だけ学ぶようにしてください!

そして、はい、これはおそらくStackOverflowのどこかで回答されますが、これまでに確認した上位の回答では回答されていません。用語はあまりに一般的すぎて使用できません。答えが「参照してください」である質問が多すぎます。私はその時点を過ぎました。

ここに私が得るエラーがあります。 3種類ありますが、過去の経験から、最後のものは本物です。

Error   130 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' does not contain a definition for 'Database' and no extension method 'Database' accepting a first argument of type 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' could be found (are you missing a using directive or an Assembly reference?) 

Error   114 'object' does not contain a definition for <blah>

Error   59  The type or namespace name '<blah>' could not be found (are you missing a using directive or an Assembly reference?)    

あは私はエラーだけでなく警告も調べました、そしてここに私が見るものがあります:

Warning 69  The referenced project '..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj' does not exist.  AWI.WWG.EXPMRI.MriUpload.Objects

この場合、.csprojファイルは「B」です。プロジェクト参照を削除して再度追加しても、これが表示されます。でも、近づいてきたような気がします!

うーん、私は別のDLLを見つけました。「A」が参照する「D」と呼びます。それをプロジェクトに追加すると、苦情が出始めます。

----------------
The  Add Reference Dialog could not be shown due to the error:

The specified path, file name, or both are too long.  The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
----------------

これは関連しているのでしょうか、それとも単なる別の気晴らしでしょうか?


わかりませんでしたが、問題を見つけました。

IDEを介して参照を追加すると、これが「C」のcsprojファイルに追加されます。

<ProjectReference Include="..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj">

これはコンパイルされず、参照されたプロジェクトが見つからないことを警告し、それらすべてのエラーが発生します。しかし、ProjectReferenceを次のように変更します。

<ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj">

...そしてそれはうまくいきます。これらのパスはどちらも256文字に近いものではないことに注意してください。完全修飾されたものはたった135文字です。しかし、おそらくIDEはパスの愚かな装飾を行っています。

23
Daniel Williams

解決策は、Windowsのファイルパスの制限と関係があり、_ このブログ で説明されているように、IDEは相対パスを完全なパスに変換します。

当面の解決策は、csprojファイルを手動で編集して絶対パスを使用することです。参照が再度追加されるまで、絶対パスが有効になります。いつかフォルダを短くするかもしれませんが、現時点では最優先事項ではありません。

この問題があると思われる場合は、コンパイラからの警告メッセージを確認してください。私はしばしばこれらを自分でオフにし、エラーだけを見ています。しかし、「参照プロジェクトが存在しない」という警告は、これを解決する手がかりでした。

他のリンクが消えた場合、MS記事へのリンクは次のとおりです。 http://support.Microsoft.com/kb/2516078

これと同じエラーがクライアントフレームワークターゲティングの問題などのさまざまな問題に現れ、参照の読み込みに失敗したときに警告としてログに記録されることは注目に値します。参照が実際に必要ない場合は問題にならないので、おそらく参照エラーは単なる警告です。

21
Daniel Williams

プロジェクトにアセンブリへの参照が含まれていることを確認します。

enter image description here

ビルド順序が依存関係と一致することを確認します

enter image description here

最後に、すべてが正しく設定されている場合は、次のビルド順序が表示されます。

enter image description here

これはあなたの問題ではないようですが、完全を期すために、(プロジェクトが.NET Framework 3.5以降をターゲットにしている場合)チェックするもう1つのことは、両方のプロジェクトのターゲットフレームワークが一致することです。フレームワークのフルバージョンからクライアントプロファイルをターゲットとするものをリンクしている場合は、「見つかりません」エラーも表示されます。

enter image description here

12
Gustavo Mori

警告セクションに移動してすべての警告を解決すれば完了です...

警告セクションには、参照しているプロジェクトに必要なすべての内部dll依存関係が表示されます。

9
Amit Kohli

これがあなたの問題の答えではないことは知っていますが、使用しているプロジェクトよりも高い.netバージョンのプロジェクトを参照しようとすると、エラーは非常に似ています。 IE:.net 3.5から.net 4.5で何かを参照することはできません

7
dwbartz

数時間の不満の末、VS2017ソリューションでこの問題を解決する次のプロセスを発見しました。

Insure that all reference assemblies have been recognized and have current properties.

If assemblies do not show proper reference, right click the entry
and view properties.  This action often resets the reference. This
action must be completed for each project in the solution.

After resolving all references, if the error continues, delete the
following:

        -The Obj folder

        -The Bin folder

        -Reference to the offending Assembly

        -Clean and Rebuild the solution.  Errors should occur.

        -Re-reference the needed Assembly.

The editor should no longer show the namespace error and build should succeed.
1
Marty Grogan

NuGetを介して通常使用するプロジェクトを更新するときに、これを取得しました。更新されたビルド済みdllをパッケージフォルダーに単にコピーすれば、マシンでNuGetをセットアップしなくてもテストできると思いましたが、私のアプリがまだ古いバージョン番号を探していたため、それほど単純ではありませんでした。それが誰かを助けることを願っています。

1
user1568891

基本的に、これは欠落している参照のように聞こえます。

私が考えることができるいくつかの健全性チェックは:

  1. エラーを生成するプロジェクトがCであることを確認しますか?
  2. 名前空間Bのスペルを間違えていませんか?
  3. Cをコンパイルする前にBでコンパイルエラーが発生した可能性はありますか? (これにより、コンパイラがBで名前空間を見つけられなくなる可能性があります)。
  4. 他にコンパイルエラーまたは警告はありますか?

編集

別の提案:Bアセンブリのクラスはpublicとして定義されていますか?

1
Ran

C#6.0でglobal::[namespace][type I want to use]を使用してこれを解決しました

0
njelly

VS2017では、ソリューションのプロジェクトがアンロードされたときにこの問題が発生しました。

0
Ernest

クリーンなプロジェクトを作成し、プロジェクトで使用する最小限のアセンブリセットをテストします。これにより、ソリューションに問題があるかどうか、または新しく作成したプロジェクトに同じ症状があるかどうかを確認できます。もしそうなら、おそらくVS、.netなどが壊れているか何かです。

0
Tomas Voracek

別の問題を解決しようとしているときに突然このエラーが発生し始めました

Solution => properties =>プロジェクトの依存関係に移動することでこれを解決し、名前空間エラーが発生していた2つのプロジェクトの依存関係がすべてオフになりました。チェックボックスをオンにして、エラーなしでソリューションを再構築しました。

0
user3244733