web-dev-qa-db-ja.com

警告「Y.csのタイプXはインポートされたZ.dllのタイプXと競合します」

プロジェクトのmain.csは、次の警告を返します。

警告1「PATH\Extensions.cs」のタイプ「Extensions.MessageDetails」は、「path\lib.dll」のインポートされたタイプ「Extensions.MessageDetails」と競合します。 「path\Extensions.cs」で定義されているタイプを使用します。 path\main.cs

私のプロジェクトの何が問題になっていますか?警告を取り除く方法は?

私のプロジェクトのコードの構造は次のとおりです。

Extensions.cs

namespace Extensions
{

    public class MessageDetails
    {
        public string message { get; set; }
        public string link { get; set; }
        public string picture { get; set; }
        public string name { get; set; }
        public string caption { get; set; }
        public string description { get; set; }
        public string userid { get; set; }
        public string username { get; set; }

        public object actions { get; set; }
        public object privacy { get; set; }
        public object targeting { get; set; }
    }

}

lib.dll

namespace MyClassLib {

    public class MyClassLibFoo {
        public void foo(MessageDetails parameters) {
            /* .. */
        }
    }

}

main.cs

using MyClassLib;
using Extensions;

class Program
{
    static void Main(string[] args)
    {
        MessageDetails md = new MessageDetails();
    }
}
35
The Mask

どうやら Extensions.csは、lib.dllmain.exeをビルドするプロジェクトの一部です。

この問題を解決するには、プロジェクトの1つから削除してください。

30

私の場合、Visual Studio 2013では、クラスライブラリの1つがそれ自体への参照を開発していることがわかりました。ソリューションに新しいプロジェクトを追加したとき、またはバグだったときに起こったと思いますが、どちらにしてもこの正確な問題を引き起こしていました。

循環参照のプロジェクト参照を確認してください。

57
James Blake

4.5.2のターゲット.NET Frameworkバージョンから4.0に戻した場合、この種の問題が発生しました。

App_Codeフォルダー内のクラスには、そのフォルダー内の他のクラスのメソッドを呼び出すメソッドがありました。 「AppCode」という名前の標準フォルダを作成し、クラスをそのフォルダに移動すると、問題はなくなりました。

「App_Code」フォルダーを再作成し、クラスをそのフォルダーに戻すと、この問題が再び発生します。私はそれが私の.NET Frameworkバージョンに関係していると確信している、またはVisual Studioは最初に別のバージョンにビルド/ターゲット化された後、それを変更するだけではうまく対処できない。

11
vapcguy

コードが同じであっても、同じオブジェクトとして表示されない場合でも、拡張機能クラスのコピーを2つ持つことはできません。 dllとメインアプリケーションの両方が、まったく同じものを参照する必要があります。

「共通ファイル」クラスライブラリを作成して、それに拡張クラスを追加してみてください。そうすれば、常に正しいクラスを使用できます。

4
Eamonn McEvoy

NuGetでもホストされているプロジェクトでこの問題が発生しました。すべてのプロジェクト参照を確認しました。最後に、オブジェクトブラウザーは、NuGetパッケージの古いバージョンのDLLがNuGetキャッシュフォルダー( "C:\ Users\{username} \。nugetからVisual Studioに何らかの方法でロードされたことを明らかにしました\ packages ")。キャッシュフォルダーからパッケージを削除すると、オブジェクトブラウザーから消えて、すべて正常に機能するようになりました。

2
SvenEV

「プロジェクトB」と「プロジェクトC」の両方に含まれる共有プロジェクト「プロジェクトA」がありました。

「プロジェクトA」が「プロジェクトB」および「プロジェクトC」の共有プロジェクトとして追加されました。

「プロジェクトA」には、「プロジェクトB」への従来の参照も含まれていました。

問題を修正するために、「プロジェクトA」から「プロジェクトB」への参照を削除しました。

1
NightShovel

私は同じ問題に直面していました。そのための簡単なソリューションです。

同じプロジェクト参照が存在する必要があるプロジェクト参照を確認してください。削除するだけで機能します。

1
Rahul Nikam

時々このエラーが表示されます-私の場合はバグです。修正するには、Explorer /(またはUnity Engineのファイルでスクリプトファイル名の最初の文字を大文字から小文字に変更するだけです私の場合)そして、私のスクリプトでそれに応じて名前/クラスを変更します。 Idkこれが起こる理由..ちょうど--Idkこの修正が機能する理由..しかし、私の場合は常にそうです。 -それ以外の場合は、おそらく2つのdiffスクリプトに対して同じスクリプト/同じクラス名の2つのコピーがあります。お役に立てれば。

1
doodlebits

両方のクラスを2つの別個のdllで宣言または参照する必要がある場合、クラスをinternalとしてマークできます。

内部の型またはメンバーは、同じアセンブリ内のファイル内でのみアクセスできるため、衝突を防ぐことができます。

0