Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El ensamblado 'AssemblyName1' usa 'TypeName' que tiene una versión superior a la del ensamblado al que se hace referencia 'AssemblyName2'.
Tiene acceso a un tipo que tiene un número de versión mayor que el número de versión en un ensamblado al que se hace referencia. Normalmente, este error se debe al uso accidental de dos versiones del mismo ensamblado.
Por ejemplo, supongamos que tiene dos assemblies, Asmb1 y Asmb2. Assembly Asmb1 hace referencia a la versión 1.0 del ensamblado Asmb2. Assembly Asmb1 también usa una clase MyClass que se agregó al ensamblado Asmb2 en la versión 2.0. El compilador tiene reglas de unificación para la vinculación de referencias, y una referencia a MyClass en la versión 2.0 no puede ser satisfecha por la versión 1.0.
Examples
El siguiente ejemplo más detallado consta de cuatro módulos de código:
- Dos dll que son idénticas excepto para un atributo de versión.
- Tercera DLL que hace referencia a las dos primeras.
- Cliente que solo hace referencia a la versión 1.0 de los archivos DLL idénticos, pero accede a una clase de la versión 2.0.
El código siguiente crea el primero de los archivos DLL idénticos. Para obtener información sobre cómo generar un archivo de clave, vea KeyFile (Opciones del compilador de C#).
// CS1705a.cs
// Compile by using the following command:
// csc /target:library /out:C:\\CS1705.dll /keyfile:mykey.snk CS1705a.cs
// The DLL is created in the C:\ directory.
// The AssemblyVersion attribute specifies version 1.0 for this DLL.
[assembly:System.Reflection.AssemblyVersion("1.0")]
public class Class1
{
public void Method1() {}
}
El código siguiente define la versión 2.0 del ensamblado, según lo especificado por el AssemblyVersionAttribute atributo .
// CS1705b.cs
// Compile by using the following command:
// csc /target:library /out:CS1705.dll /keyfile:mykey.snk CS1705b.cs
// The DLL is created in the current directory.
// The AssemblyVersion attribute specifies version 2.0 for this DLL.
[assembly:System.Reflection.AssemblyVersion("2.0")]
public class Class1
{
public void Method1() { }
}
El código siguiente hace referencia a las dos versiones dll definidas en el código anterior.
AssemblyA hace referencia al archivo DLL creado por CS1705a.cs (versión 1.0).
AssemblyB hace referencia al archivo DLL creado por CS1705b.cs (versión 2.0). En ClassC, se definen dos métodos. El primero, Return1A, devuelve un objeto de tipo Class1A, que es un alias de Class1 la versión 1.0 del archivo DLL. El segundo, Return1B, devuelve un objeto de tipo Class1B, que es un alias de Class1 de la versión 2.0 del archivo DLL. La definición de Return1A crea una dependencia en la versión 1.0; la definición de Return1B crea una dependencia en la versión 2.0.
// CS1705c.cs
// Compile by using the following command. AssemblyA refers to the DLL created by
// CS1705a.cs (version 1.0). AssemblyB refers to the DLL created by CS1705b.cs
// (version 2.0).
// csc /target:library /r:AssemblyA=C:\\CS1705.dll /r:AssemblyB=CS1705.dll CS1705c.cs
extern alias AssemblyA;
extern alias AssemblyB;
// Class1A is an alias for type Class1 from VS1705a.cs, which is in version 1.0
// of the assembly. Class1B is an alias for type Class1 from CS1705b.cs, which
// is in version 2.0 of the assembly.
using Class1A = AssemblyA::Class1;
using Class1B = AssemblyB::Class1;
// Method Return1A in ClassC returns an object of type Class1A, which is
// Class1 from version 1.0 of the DLL. Method Return1B returns an object
// of type Class1B, which is Class1 from version 2.0 of the DLL.
public class ClassC
{
// The following line creates a dependency on version 1.0 of CS1705.dll.
// This is not the source of the problem when ClassC is accessed from
// CS1705d.cs because CS1705d.cs references version 1.0 of the DLL.
// Therefore, type Class1A and the assembly have the same version.
public static Class1A Return1A() { return new Class1A(); }
// The following line creates a dependency on version 2.0 of CS1705.dll.
// This causes compiler error CS1705 when ClassC is accessed from
// CS1705d.cs, because CS1705d.cs does not reference version 2.0 of the
// DLL. Class1B is the alias for Class1 in version 2.0, and CS1705d.cs
// references version 1.0.
public static Class1B Return1B() { return new Class1B(); }
}
El código siguiente genera el error del compilador CS1705. Hace referencia al archivo DLL creado por CS1705a.cs (versión 1.0). Sin embargo, en el Main método , el código accede ClassC desde CS1705c.cs.
ClassC usa un tipo definido en CS1705b.cs (versión 2.0). Esto provoca el error del compilador CS1705 porque el tipo tiene un número de versión para CS1705.dll que es superior a la versión a la que se hace referencia de CS1705.dll.
// CS1705d.cs
// Compile by using the following command:
// csc /reference:C:\\CS1705.dll /reference:CS1705c.dll CS1705d.cs
// C:\\CS1705.dll is version 1.0 of the assembly.
class Tester
{
static void Main()
{
// Return1A returns a type defined in version 1.0.
ClassC.Return1A().Method1();
// Return1B returns a type defined in version 2.0.
ClassC.Return1B().Method1();
}
}
Puede resolver el error de una de las maneras siguientes:
Actualice el código para que todos los archivos usen la misma versión del archivo DLL.
Agregue una referencia a la versión 2.0 del archivo DLL para CS1705d.cs mediante el siguiente comando para compilar:
csc /reference:C:\\CS1705.dll /reference:CS1705.dll /reference:CS1705c.dll CS1705d.csAunque el programa se compila cuando se usa este comando, todavía no se ejecuta. Para permitir que el programa se ejecute, puede proporcionar un archivo de configuración de aplicación que incluya un
<dependentAssembly>elemento que use<assemblyIdentity>y<codeBase>elementos secundarios para especificar la ubicación de la versión 1.0 del archivo DLL. Para obtener más información sobre los archivos de configuración, consulte Configuración de aplicaciones.