Прочитать на английском

Поделиться через


Ошибка компилятора CS0433

Тип "имя типа 1" существует одновременно в "имя типа 2" и "имя типа 3"

Две разных сборки, на которые ссылается ваше приложение, содержат одинаковые пространство имен и тип, в результате чего возникает неоднозначность.

Чтобы устранить эту ошибку, используйте функцию псевдонима параметра компилятора References или удалите ссылку на одну из этих сборок.

Эта ошибка также может возникать, если:

  • Директива @ Page имеет атрибут CodeFile вместо атрибута CodeBehind.
  • Код располагается в папке App_Code, хотя не должен.

Примеры

Этот код создает библиотеку DLL с первой копией неоднозначного типа.

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

Этот код создает библиотеку DLL со второй копией неоднозначного типа.

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

Таким образом, при использовании этих двух библиотек (CS0433_1.dll и CS0433_2.dll) в проекте использование AggPubImpAddPubImp типа будет неоднозначным и приведет к ошибке CS0433компилятора.

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

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

В следующем примере показано, как использовать функцию псевдонима параметра компилятора /reference для <Aliases><ProjectReference> устранения этой ошибки CS0433.

XML
<!-- CS0433_4.csproj -->  
<ProjectReference Include="..\CS0433_1\CS0433_1.csproj">  
  <Aliases>CustomTypes</Aliases>
</ProjectReference>
<ProjectReference Include="..\CS0433_2\CS0433_2.csproj" />  
C#
// CS0433_4.cs in CS0433_4.csproj  
// compile with: /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_1.dll 
      AggPubImpAggPubImp n6 = new AggPubImpAggPubImp();
      
      // AggPubImpAggPubImp taken from CS0433_2.dll
      CustomTypes.TypeBindConflicts.AggPubImpAggPubImp n7 =
          new CustomTypes.TypeBindConflicts.AggPubImpAggPubImp();
   }  
}