Kompilatorfel CS0433

Typen TypeName1 finns i både TypeName2 och TypeName3

Två olika sammansättningar som refereras till i ditt program innehåller samma namnområde och typ, vilket ger tvetydighet.

Lös det här felet genom att använda extern alias-funktionen med projektreferensalias eller genom att inte referera till en av dina assemblies. Du kan också använda aliasfunktionen i kompilatoralternativet (Referenser) när du kompilerar direkt med C#-kompilatorn.

Det här felet kan också inträffa om:

  • Direktivet @ Page har ett CodeFile attribut när det ska vara ett CodeBehind attribut.
  • Koden placeras i en App_Code mapp som inte ska finnas där.

Så här identifierar du de motstridiga sammansättningarna

Det fullständiga felmeddelandet visar vilka sammansättningar som innehåller den konfliktfyllda typen. Meddelandeformatet är:

error CS0433: The type 'N.C' exists in both 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'B, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'

I det här exemplet är de motstridiga sammansättningarna A och B. Sammansättningsnamnen visas inom enkla citattecken före versionsinformationen. Använd dessa sammansättningsnamn för att avgöra vilka referenser som orsakar konflikten och bestämma hur den ska lösas.

Exempel

Den här koden skapar det DLL som innehåller den första kopian av den tvetydiga typen.

// CS0433_1.cs in CS0433_1.csproj  
// compile with: dotnet build or /target:library  
namespace TypeBindConflicts
{  
   public class AggPubImpAggPubImp { }  
}  

Den här koden skapar DLL:en med den andra kopian av den tvetydiga typen.

// CS0433_2.cs in CS0433_2.csproj  
// compile with: dotnet build or /target:library  
namespace TypeBindConflicts
{  
   public class AggPubImpAggPubImp { }  
}  

När du använder dessa två bibliotek (CS0433_1.dll och CS0433_2.dll) i projektet blir det därför tvetydigt att använda AggPubImpAggPubImp typen och leder till kompilatorfel CS0433.

<!-- CS0433_3.csproj -->
<ProjectReference Include="..\CS0433_1\CS0433_1.csproj" />  
<ProjectReference Include="..\CS0433_2\CS0433_2.csproj" />  
// CS0433_3.cs in CS0433_3.csproj  
// compile with: dotnet build or /reference:cs0433_1.dll /reference:cs0433_2.dll  
using TypeBindConflicts;

public class Test
{  
   public static void Main()
   {  
      AggPubImpAggPubImp n6 = new AggPubImpAggPubImp();   // CS0433  
   }  
}  

I följande exempel visas hur du kan använda extern alias funktionen med projektreferenser för att lösa det här CS0433-felet. Detta är den rekommenderade metoden för moderna .NET-projekt.

Steg 1: Lägg till ett alias i en av projektreferenserna

Ändra först projektfilen för att lägga till ett alias i någon av de projektreferenser som är i konflikt:

<!-- CS0433_4.csproj -->  
<ProjectReference Include="..\CS0433_1\CS0433_1.csproj">  
  <Aliases>CustomTypes</Aliases>
</ProjectReference>
<ProjectReference Include="..\CS0433_2\CS0433_2.csproj" />  

Steg 2: Använd externt alias i koden

extern alias Använd sedan direktivet och kvalificerade typnamn för att skilja mellan de två typerna:

// CS0433_4.cs in CS0433_4.csproj  
// compile with: dotnet build or /reference:cs0433_1.dll /reference:CustomTypes=cs0433_2.dll  
extern alias CustomTypes;  
using TypeBindConflicts;  

public class Test
{  
   public static void Main()
   {  
      // AggPubImpAggPubImp taken from CS0433_2.dll (no alias, default global namespace)
      AggPubImpAggPubImp n6 = new AggPubImpAggPubImp();
      
      // AggPubImpAggPubImp taken from CS0433_1.dll (via CustomTypes alias)
      CustomTypes.TypeBindConflicts.AggPubImpAggPubImp n7 =
          new CustomTypes.TypeBindConflicts.AggPubImpAggPubImp();
   }  
}