web-dev-qa-db-ja.com

名前空間が認識されない(存在する場合でも)

このエラーが発生しています:

型または名前空間名 'AutoMapper'が見つかりませんでした(usingディレクティブまたはAssembly参照がありませんか?)

おもしろいことは、私のプロジェクトにすでにその参照があることです:

ProjectThatFails

そして、これは私のコードです:

using System.Collections.Generic;
using DataContract;
using SelectorDAL;
using AutoMapper;

namespace SpecimenSelect
{
    public class SpecimenSelect : ISpecimenSelect
    {
        public SpecimenSelect()
        {
            SetupMaps();
        }

        private static void SetupMaps()
        {
            Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>();
        }

もう1つの奇妙な点は、AutoMapperを使用し、まったく同じAutoMapper.dllファイルを参照する2つのプロジェクトがソリューションにあることです。どちらも完璧に機能します。

以下にスクリーンショットを示します:

ProjectThatWorks

そして、ここにそのコードがあります(それはうまくコンパイルされます):

using System.Collections.Generic;
using AutoMapper;
using DataContract;
using SelectorDAL;

namespace PatientSelect
{

    public class PatientSelect : IPatientSelect
    {
        public PatientSelect()
        {
            SetupMaps();
        }

        private void SetupMaps()
        {
            Mapper.CreateMap<Patient, PatientContract>();
            Mapper.CreateMap<OrderedTest, OrderedTestsContract>();
            Mapper.CreateMap<Gender, GenderContract>();
        }

両方の参照のプロパティページに同じデータがあるようです。

私は何が欠けていますか?

私は試した:

  1. Visual Studioの再起動
  2. Usingステートメントなしで参照する(つまりAutoMapper.Mapper.CreateMap
  3. クリーニングと再構築

他のアイデアはありますか?

132
Vaccano

プロジェクトが.NET Framework 4 Client Profileを使用するように設定されていないことを確認してください。

これを確認/変更するには、プロジェクト(ソリューションではない)を右クリックし、Propertiesを選択します。 ->アプリケーション->ターゲットフレームワーク。ターゲットフレームワークは、そのページのドロップダウンです。

これはVisual Studioの問題です(バグと呼ぶことさえできます)。 AutoMapperでは、.NET Framework 4 Client Profileから除外されるアセンブリが必要です。プロジェクトはそのバージョンのフレームワークを使用しているため、機能しません。

参照しているプロジェクトの.NET Frameworkバージョンが、参照を作成しているプロジェクトよりも高い場合、同様のエラーがビルドプロセスに伝播します。つまり、4.5.1をターゲットとするプロジェクトを参照する4.5をターゲットとするプロジェクトでは、この同じエラーが発生します。

エラーメッセージは、明確に参照したアセンブリを参照するように指示するため、ビルドできない理由に関する合理的な説明がないため、これが発生した場合は、より良いエラーメッセージが必要です。

245
Andrew Hare

愚かな質問をさせてください:2つのautomapper.dllファイルがありますか? AutoMapper名前空間を持つものとないもの両方のプロジェクトのパスを確認します。

また、usingコマンドの順序が異なることに気付きました。それは問題ではありませんが、それらをシャッフルしようとしましたか?

27
n8wrl

クラスがコンパイルされない場合は、プロジェクト内にある場合でも、以下を確認してください。

  1. クラス名がまったく同じかどうか
  2. 名前空間がまったく同じかどうか
  3. クラスプロパティがビルドアクション=コンパイルを示すかどうか
17
Anonymous

この問題を解決するには、ファイルを含むフォルダーを右クリックしてプロジェクトから除外を選択し、再度右クリックしてプロジェクトに含めるを選択します(最初に有効にする必要があります- すべてのファイルを表示除外されたフォルダーを表示します)

8
user3251328

VS2010で参照が認識されないという同様の問題があり、ここでの回答では修正できませんでした。

私のソリューションの問題は、参照されているプロジェクトが置かれているパスの拡張子に関連していました。 SVNで作業しているときに、リポジトリのブランチを作成してテストを行い、そのブランチでパス構造が2レベル増加したため、パスが長すぎてWindowsで使用できなくなりました。これはエラーをスローしませんでしたが、プロジェクト参照の名前空間を認識しませんでした。プロジェクトの場所を修正してパスを小さくすると、すべてがうまくいきました。

7
onurb84

私の場合、参照されるdllは.Net Frameworkの上位バージョンでビルドされました。参照を追加した後、使用できました。しかし、ビルドを行うとすぐに、「参照なし」エラーがポップアップ表示されます。エラーが発生するDLLを更新しますが、ビルドはできません。この投稿により、フレームワークのバージョンを確認できたため、参照プロジェクトを同じバージョンでビルドすることで解決できました。

5
Ankur-m

これは、他のすべての答えが役に立たない場合、最も簡単な解決策でなければなりません

私は答えの中でセットアップのどこが悪いのかを探していましたが、すべてを試してみました-どれも機能しませんでした-そして、Visual Studio 2018Microsoftによって開発されたことに気付きました。だから私はほとんどの人がすることをしました、

Visual Studioの再起動そして、うまくいきました

3
insomniac

おそらく、プロジェクトのタイプテーブルの状態が正しくありません。参照を削除/追加し、それが機能しない場合は、別のプロジェクトを作成し、コードをインポートして、それが機能するかどうかを確認します。

VS 2005を使用中にこれに遭遇しましたが、expect MSが、今までにその特定の問題を修正していたでしょう。

3
dave

質問はすでに授与されていますが、確認する必要があるまだ説明されていない追加の詳細があります。

私もこの動作をしていました。プロジェクトBはプロジェクトAで参照されていましたが、プロジェクトBの名前空間はプロジェクトAで認識されませんでした。プロジェクト(AとBの両方)のパスを減らすことにより、参照が表示され、使用可能になりました。

私はこの理論を、より少ないパスの深さでプロジェクトCを作成することでテストしました。プロジェクトAでプロジェクトCを参照しました。参照は期待どおりに正しく機能しました。次に、プロジェクトCをソリューションから削除し、プロジェクトCをプロジェクトBと同じ深いパスに移動し、プロジェクトCをソリューションに追加して、コンパイルを試みました。その後、Cオブジェクトを投影する可視性がなくなりました。

3
barrypicker

私の場合、クラスライブラリをコピーし、プロジェクトプロパティの「アセンブリ名」を変更しなかったため、一方のDLLが他方を上書きしていました...

クレイジー。知っている。

ここですべてのオプションを試しました。再起動、クリーニング、生成されたDLLの手動チェックイン(実際に混乱したのは自分自身かどうかを理解する上で非常に貴重です)。

オプションでMSBuildのVerbosityを「Detailed」に設定することで機能しました。

1
Program.X

コンパイル中は問題ありませんが、実行中に名前空間/メソッドが見つからないという同様の問題に直面しました。この理由は、参照しているアセンブリがGACに展開され、その後変更されたためです。 Visual Studionでは最新のものを使用していましたが、ランタイム中はGACのバージョンが使用されていました。

1

この質問は元のポスターについては既に回答されていますが、MS-Testプロジェクトで誰かがこれに遭遇した場合に備えて:

visual Studio内で、[テスト]メニュー-> [テスト設定]-> [既定のプロセッサアーキテクチャ]をクリックし、参照している他のアセンブリのアーキテクチャと一致することを確認します。他のアセンブリがx64で、テスト設定がx86の場合、元のポスターにあった症状が発生する可能性があります。

1
S. Hooley

私の場合、VS 2015でのみエラーが発生しました。VS2017でプロジェクトを開くと、エラーはなくなりました。

1
daniel

私の場合、そのアセンブリを削除/追加するとうまくいきました。

0
sheikh sabeer

私はXamarinプロジェクトに取り組んでいましたが、いつものように、objフォルダを削除して再構築すると問題が解決しました、VSが認識していない名前空間は自分のプロジェクトのコードでしたBTW

0
mohas