CS0433-ás fordítási hiba

A TypeName1 típus a TypeName2 és a TypeName3 típusnévben is létezik

Az alkalmazásban hivatkozott két különböző szerelvény ugyanazt a névteret és típust tartalmazza, ami kétértelműséget eredményez.

A hiba megoldásához használja a extern alias funkcióját projekthivatkozási aliasokkal, vagy ne hivatkozzon az egyik assembly-re. A (Hivatkozások) fordítóprogram aliasfunkcióját is használhatja közvetlenül a C#-fordítóval való fordításkor.

Ez a hiba akkor is előfordulhat, ha:

  • Az @ Page irányelv attribútummal CodeFile rendelkezik, ha attribútumnak CodeBehind kell lennie.
  • A kód egy App_Code mappába kerül, amely nem található ott.

Az ütköző összeállítások azonosítása

A teljes hibaüzenet azt mutatja, hogy mely összeállítások tartalmazzák az ütköző típust. Az üzenet formátuma a következő:

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'

Ebben a példában az ütköző szerelvények A és B. A szerelvénynevek egyetlen idézőjelben jelennek meg a verzióinformációk előtt. Ezekkel az összeállításnevekkel meghatározhatja, mely hivatkozások okozzák a konfliktust, és döntse el, hogyan oldja fel azt.

Példák

Ez a kód létrehozza a DLL-t a nem egyértelmű típus első példányával.

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

Ez a kód létrehozza a DLL-t a nem egyértelmű típus második példányával.

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

Tehát a projekt két kódtárának (CS0433_1.dll és CS0433_2.dll) használatakor a AggPubImpAggPubImp típus használata nem egyértelmű, és fordítási hibához CS0433fog vezetni.

<!-- 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  
   }  
}  

Az alábbi példa bemutatja, hogyan használhatja a funkciót projekthivatkozásokkal extern alias a CS0433-hiba megoldásához. Ez a modern .NET-projektek ajánlott megközelítése.

1. lépés: Alias hozzáadása az egyik projekthivatkozáshoz

Először módosítsa a projektfájlt úgy, hogy aliast adjon hozzá az ütköző projekthivatkozások egyikéhez:

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

2. lépés: Az extern alias használata a kódban

Ezután használja az irányelvet és a extern alias minősített típusneveket a két típus megkülönböztetéséhez:

// 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();
   }  
}