c# - ServiceStack: probando OrmLite, instalado con NuGet pero obtengo el error "FileNotFoundException"
mysql visual-studio-2012 (2)
Acabo de instalar OrmLite (para MySql) a través de NuGet en Visual Studio 2012.
La instalación se realiza sin ningún error y todas las DLL: s parecen agregarse como referencia:
ServiceStack.Common (3.9.70.0)
ServiceStack.Interfaces (1.0.0.0)
ServiceStack.Text (3.9.70.0)
ServiceStack.OrmLite (3.9.70.0)
ServiceStack.OrmLite.MySql (3.9.70.0)
La compilación no da ningún error. Sin embargo, cuando ejecuto esta línea:
dbConnCommOrm.CreateTableIfNotExists<ModuleSettings>();
Entonces obtengo este error:
No se pudo cargar el archivo o ensamblado ''ServiceStack.Common, Version = 3.9.69.0, Culture = neutral, PublicKeyToken = null'' o una de sus dependencias. El sistema no puede encontrar el archivo especificado.
Las referencias dll ServiceStack.Common (a través de NuGet) es la versión 3.9.70.0 por lo que no es muy extraño que no pueda encontrar 3.9.69.0.
La pregunta es: ¿por qué estoy instalando 3.9.70.0 cuando en su lugar requiere 3.9.69.0? ¿Hay algún problema con el "guión" de NuGet (o como sea que funcione), o qué me falta?
Lo extraño es que, aunque recibo una excepción en la línea mencionada anteriormente, la tabla "ModuleSettings" se crea correctamente.
Además, descargar el archivo ZIP de GitHub y extraer las DLL de allí tampoco funciona: en ServiceStack.OrmLite-master / lib están los tres primeros archivos (ver arriba), y por alguna razón encuentro ServiceStack.Ormlite.dll en ServiceStack.OrmLite-master / lib / signed folder, pero no hay ServiceStack.OrmLite.MySql.dll en ninguna parte del archivo ZIP .
También podría agregar que tampoco funciona instalar una versión anterior. Intenté esto: http://www.nuget.org/packages/ServiceStack.OrmLite.MySql/3.9.69
PM> Install-Package ServiceStack.OrmLite.MySql -Version 3.9.69
Y todavía instaló ServerStack.Common / Text v 3.9.70.0
Cualquier consejo sería apreciado =)
¿Has intentado agregar un conjunto de redirección en tu web.config?
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ServiceStack.Common" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.9.70.0" newVersion="3.9.70.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Podría ser que uno de los elementos del paquete que ha instalado busca específicamente la versión 3.9.69.0 y aún no se ha actualizado. El uso de la redirección de enlace de ensamblaje debe anular eso y redirigir todas las solicitudes para ese ensamblaje a la versión 3.9.70.
Editar
Esto también funciona para proyectos que no sean web. Abra (o agregue) un archivo app.config y agregue la misma información. Es un elemento de nivel superior dentro del elemento <configuration></configuration>
.
Si es un archivo vacío app.config:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ServiceStack.Common" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.9.70.0" newVersion="3.9.70.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
En mi solución tengo los proyectos: Site, BusinessLogic, DAL
Con la cadena de llamadas: Sitio -> BusinessLogic -> DAL (OrmLite aquí)
Debido a la falta de acoplamiento de ServiceStack, el proyecto del Sitio no incluía la referencia a ServiceStack.Common
. Mi solución fue
Install-Package ServiceStack.Common -Version 3.9.71 -DependencyVersion Highest
Para el proyecto del sitio. Tenga en cuenta el uso de DependencyVersion; de lo contrario, obtendrá una versión menor de ServiceStack.Text y las cosas no serán felices.