Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
@ Pageirányelv attribútummalCodeFilerendelkezik, ha attribútumnakCodeBehindkell 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();
}
}