簡體   English   中英

警告“Y.cs 中的 X 類型與 Z.dll 中導入的 X 類型沖突”

[英]Warning “The type X in Y.cs conflicts with the imported type X in Z.dll”

我的項目的main.cs返回以下警告:

警告 1 'PATH\Extensions.cs' 中的類型 'Extensions.MessageDetails' 與 'path\lib.dll' 中的導入類型 'Extensions.MessageDetails' 沖突。 使用“path\Extensions.cs”中定義的類型。 路徑\main.cs

我的項目有什么問題? 如何擺脫警告?

我的項目代碼結構如下:

擴展.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) {
            /* .. */
        }
    }

}

主文件

using MyClassLib;
using Extensions;

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

在我的例子中,使用Visual Studio 2013,我發現我的一個類庫已經開發了一個對它自己的引用。 我認為這是在我向我的解決方案添加新項目時發生的,或者它是一個錯誤,但無論哪種方式都導致了這個問題。

檢查項目參考是否有任何循環引用。

看起來Extensions.cs既是構建lib.dll和你的main.exe的項目的一部分

從其中一個項目中刪除它以解決此問題。

我遇到過這種問題,我已經從目標.NET Framework 4.5.2版恢復到4.0

我的App_Code文件夾中的類具有在該文件夾中的其他類中調用方法的方法。 當我創建一個名為“AppCode”的標准文件夾,並將我的類移入其中時,我不再遇到問題。

如果我重新創建“App_Code”文件夾並將我的類移回其中,我將再次遇到此問題。 我確信它與我的.NET Framework版本有關,或者Visual Studio在最初構建/定位到另一個版本之后不能很好地改變它。

您不能擁有擴展類的兩個副本,即使代碼相同,它們也不會被視為同一個對象。 您的dll和主應用程序都需要引用完全相同的應用程序。

您可以嘗試創建“公共文件”類庫並向其添加擴展類,這樣您將始終使用正確的類

我在一個也在NuGet上托管的項目遇到了這個問題。 我檢查了所有項目參考。 最后,對象瀏覽器顯示我的NuGet包的舊版本的DLL以某種方式從NuGet緩存文件夾(“C:\\ Users \\ {username} \\。nuget \\ packages”)加載到Visual Studio中。 我從緩存文件夾中刪除了包,它從對象瀏覽器中消失了,一切都恢復正常。

我有一個共享項目,“項目A”,它包含在“項目B”和“項目C”中。

“項目A”被添加為“項目B”和“項目C”中的共享項目。

“項目A”還包括對“項目B”的傳統參考。

為了解決這個問題,我從“項目A”中刪除了對“項目B”的引用。

我遇到過同樣的問題。 只是一個簡單的解決方案。

檢查項目引用必須有相同的項目參考。 只是刪除它,它會工作。

有時我得到這個錯誤 - 雖然在我的情況下這是一個錯誤..所有我需要做的就是修改它是將我的腳本文件名的第一個字母從大寫改為小寫在Explorer /(或在Unity Engine中)我的情況)然后在我的腳本中相應地更改名稱/類。 Idk為什么會發生這種情況..只是 - 並且Idk為什么這個修復工作..但在我的情況下它總是這​​樣。 - 否則,對於2個差異腳本,您可能有2個相同腳本/相同類名的副本。 希望這可以幫助。

在閱讀了許多關於 SO 的答案后,解決方案仍然不清楚。 我的情況類似,但通過以下方式找到了解決方案:

示例項目名稱:My.Example.Project

  1. 打開我的項目
  2. 打開參考下拉列表
  3. 在參考部分找到 My.Example.Project
  4. 刪除對 My.Example.Project 的引用

那解決了它!

如果您確實需要在兩個單獨的dll中聲明或引用這兩個類,則可以將您的類標記為internal

內部類型或成員只能在同一程序集中的文件中訪問,因此它可以防止沖突。

我通過刪除目錄結構 vs 目錄中的 .suo 文件來修復此錯誤。 停止 vs 然后刪除重新啟動 vs. 對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM