Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O assembly 'AssemblyName1' usa 'TypeName', que tem uma versão mais recente do que o assembly referenciado 'AssemblyName2'.
Você está acessando um tipo que tem um número de versão maior do que o número de versão em um assembly ao qual se faz referência. Normalmente, esse erro é causado pelo uso acidental de duas versões do mesmo assembly.
Por exemplo, suponha que você tenha duas montagens, Asmb1 e Asmb2. O Assembly Asmb1 faz referência à versão 1.0 do assembly Asmb2. O Assembly Asmb1 também usa uma classe MyClass que foi adicionada ao assembly Asmb2 na versão 2.0. O compilador tem regras de unificação para referências de vinculação, e uma referência à versão 2.0 de MyClass não pode ser satisfeita pela versão 1.0.
Exemplos
O exemplo mais detalhado a seguir consiste em quatro módulos de código:
- Duas DLLs idênticas, exceto um atributo de versão.
- Uma terceira DLL que faz referência aos dois primeiros.
- Um cliente que faz referência apenas à versão 1.0 das DLLs idênticas, mas acessa uma classe da versão 2.0.
O código a seguir cria a primeira das DLLs idênticas. Para obter informações sobre como gerar um arquivo de chave, consulte KeyFile (Opções do compilador 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() {}
}
O código a seguir define a versão 2.0 do assembly, conforme especificado pelo 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() { }
}
O código a seguir faz referência às duas versões de DLL definidas no código anterior.
AssemblyA refere-se à DLL criada por CS1705a.cs (versão 1.0).
AssemblyB refere-se à DLL criada por CS1705b.cs (versão 2.0). Em ClassC, dois métodos são definidos. O primeiro, Return1Aretorna um objeto do tipo Class1A, que é um alias da Class1 versão 1.0 da DLL. O segundo, Return1Bretorna um objeto do tipo Class1B, que é um alias da Class1 versão 2.0 da DLL. A definição de Return1A cria uma dependência na versão 1.0; a definição de Return1B cria uma dependência na versão 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(); }
}
O código a seguir gera o erro do compilador CS1705. Ele faz referência à DLL criada por CS1705a.cs (versão 1.0). No entanto, no método Main, o código acessa ClassC de CS1705c.cs.
ClassC usa um tipo definido em CS1705b.cs (versão 2.0). Isso causa o erro do compilador CS1705 porque o tipo tem um número de versão para CS1705.dll maior que a versão referenciada 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();
}
}
Você pode resolver o erro de uma das seguintes maneiras:
Atualize o código para que todos os arquivos usem a mesma versão da DLL.
Adicione uma referência à versão 2.0 da DLL para CS1705d.cs usando o seguinte comando para compilar:
csc /reference:C:\\CS1705.dll /reference:CS1705.dll /reference:CS1705c.dll CS1705d.csEmbora o programa seja compilado quando você usa esse comando, ele ainda não é executado. Para habilitar a execução do programa, você pode fornecer um arquivo de configuração de aplicativo que inclui um
<dependentAssembly>elemento que usa os elementos filhos<assemblyIdentity>e<codeBase>para especificar o local da versão 1.0 da DLL. Para obter mais informações sobre arquivos de configuração, consulte Configurando Aplicativos.