Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
@ Pagehar ettCodeFileattribut när det ska vara ettCodeBehindattribut. - 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();
}
}