Xamarin.forms: [Formularios] [iOS] Error CS1703 Múltiples ensamblajes con identidad equivalente Estándar de red 2.0 Automapper

Creado en 12 dic. 2017  ·  10Comentarios  ·  Fuente: xamarin/Xamarin.Forms

Descripción

Publicación cruzada de Automapper https://github.com/AutoMapper/AutoMapper/issues/2455

Al agregar AutoMapper >= 6.2.0, el proyecto iOS de formularios no se puede compilar y genera un error CS1703.

El error exacto es

Error CS1703

Multiple assemblies with equivalent identity have been imported: 
'C:\Users\plebm\.nuget\packages\system.reflection.emit\4.3.0\ref\netstandard1.1\System.Reflection.Emit.dll' 
and 
'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\Xamarin.iOS\v1.0\Facades\System.Reflection.Emit.dll'.
Remove one of the duplicate references.

Parece ser causado por AutoMapper agregando una dependencia adicional de System.Runtime.Serialization.Primitives.4.3.0 en 6.2.0

Pasos para reproducir

usando VS 15.5.1

  1. Crear una aplicación multiplataforma de Xamarin (Xam.Forms)
  2. Seleccione el estándar iOS y .net de las opciones de creación
  3. Agregue Automapper (6.2.2) al proyecto estándar .net
  4. Compilación del proyecto iOS

Comportamiento esperado

La compilación fue exitosa

Comportamiento real

Construcción fallida

invalid

Comentario más útil

@SvenEV tenía la solución en su compromiso
agregue esto al archivo csproj. Si está utilizando PackageReferences

<PackageReference Include="System.Reflection.Emit" Version="4.3.0">
    <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

Lo escribo aquí para hacerlo más visible. Por lo que he visto, la interfaz de emisión se usa en Automapper para mapear, por ejemplo, a las interfaces.

Todos 10 comentarios

Parece que el mapeador automático está usando algo que requiere Reflection.Emit. Eso no va a funcionar en iOS.

@jassmith gracias por el comentario. Sin embargo, una pregunta, ¿Reflection.Emit causaría un error de tiempo de ejecución o un error de compilación?

AutoMapper utiliza la compilación del árbol de expresiones, por lo que finalmente se trata de una Expression.Lambda(...).Compile(). Usamos Reflection.Emit para un par de escenarios muy específicos.

Básicamente, para que podamos apuntar a iOS, debemos asegurarnos de tener un objetivo que no use / haga referencia a Reflection. ¿Emit en absoluto?

Sin embargo, el error de compilación suena como los problemas recientes con 15.5 y las redirecciones vinculantes.

Yo tuve el mismo problema. Mi solución fue usar un project.json en mi proyecto ios como este:

{
  "dependencies": {
    "System.Reflection.Emit": {
      "version": "4.3.0",
      "exclude": "all"
    }
  },
  "frameworks": {
    "Xamarin.iOS,Version=v1.0": {}
  },
  "runtimes": {
    "win": {}
  }
}

@gmwilhelm No sabía que project.json todavía existía. hoy aprendo

@jassmith , ¿hay alguna posibilidad de que vuelvas a revisar este boleto? Sé que lo ha marcado como no válido, pero creo que esto es realmente algo que Xam.Forms debería abordar

Estoy tratando de reproducir esto localmente con solo un paquete NuGet en blanco que
hace referencia a Reflection.Emit pero no lo usa. tengo el error de compilacion
una vez, pero luego desapareció misteriosamente.

El martes 2 de enero de 2018 a las 5:54 p. m. Wade Baglin [email protected] escribió:

@jassmith https://github.com/jassmith alguna posibilidad de que revises esto
billete de nuevo? Sé que lo ha marcado como no válido, pero creo que en realidad es
algo que Xam.Forms debería abordar


Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/xamarin/Xamarin.Forms/issues/1380#issuecomment-354906852 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAGYMoqgqceTH4BPe4vqZwLkAoYb1YO0ks5tGsGxgaJpZM4Q-gOM
.

@pleb @jbogard

Puedo reproducir el error de ensamblajes múltiples en Visual Studio 15.5.5 pero no en VSMac. Creé un elemento de DevCom para rastrear esto .

FYI: para que la solución anterior funcione, es posible que deba reiniciar su VS. Eso me pasó con VS para Mac.

@SvenEV tenía la solución en su compromiso
agregue esto al archivo csproj. Si está utilizando PackageReferences

<PackageReference Include="System.Reflection.Emit" Version="4.3.0">
    <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

Lo escribo aquí para hacerlo más visible. Por lo que he visto, la interfaz de emisión se usa en Automapper para mapear, por ejemplo, a las interfaces.

¿Fue útil esta página
0 / 5 - 0 calificaciones