2011-11-10 70 views
26

main.cs我的項目返回以下警告:警告「中Y.cs衝突的X型與Z.dll進口X型」

警告1型「擴展。 'PATH \ Extensions.cs'中的'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(); 
    } 
} 
+0

您的擴展類是否有兩個副本(一個包裝在您的dll中,一個包含在您的主程序中)? –

+1

是的,我需要在命名空間'Extensions'類中使用'MessageDetails' .. –

+2

這就是你的問題,它們都需要引用同一個。嘗試將其添加到類庫來執行此操作。 –

回答

17

好像Extensions.cs是建立lib.dll對項目的一部分,你的MAIN.EXE

從一個刪除它來解決這個問題。

+2

ty,出於某種原因,vs添加了我的項目作爲參考。 – Multinerd

4

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

你可以嘗試建立一個「共同文件」類庫和擴展類添加到它,你將永遠使用正確的類

40

在我的情況是這樣,與Visual Studio 2013,我發現有一個我的班級圖書館已經開發了一個對自己的參考。我想這是在我的解決方案中添加了一個新項目或者是一個錯誤時發生的,但是無論哪種方式都會導致這個問題。

檢查您的項目引用的任何循環引用。

+0

我發現這也是導致這種錯誤的原因。這很奇怪。 –

+3

在2015年中似乎仍然是個問題,因爲這是我確切的問題。 – Tom

+1

不錯,解決了我的問題 – Mana

1

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

6

我有這種問題,我已經從目標.NET Framework版本4.5.2恢復到4.0。我的App_Code文件夾中的類具有調用該文件夾中其他類中的方法的方法。當我創建一個名爲「AppCode」的標準文件夾,並將我的類移入它時,我不再有問題。如果我重新創建了「App_Code」文件夾並將我的課程移回到其中,我又遇到了這個問題。我確信它必須與我的.NET Framework版本有關,或者Visual Studio在最初構建/定位到另一個版本後不能很好地處理它。

1

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

‘項目A’中加入作爲共享項目中的‘項目B’和‘項目C.’

‘項目A’也包括傳統的參照‘項目B’

要糾正這個問題,我刪除了從「計劃A」中提到的「計劃B」

0

如果你真的需要聲明的或在兩個單獨的dll中引用這兩個類,你可以標記類爲internal

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

0

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

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