visual studio puede para net módulo framework for especificado encontrar descargar data c# .net visual-studio sqlite interop

c# - studio - System.Data.SQLite de NuGet, interop dll no se copia al directorio de salida



sqlite.interop.dll'' no se puede encontrar el módulo especificado (9)

Con el paquete System.Data.SQLite.Core NuGet versión 1.0.104, tuve el mismo problema que @ Eternal21 y @Patrick. Es decir, el proyecto A hace referencia a SQLite y el proyecto B hace referencia a donde SQlite.Interop.dll no se copia en el directorio de salida de B.

Encontré una solución que resuelve el problema en el proyecto A en lugar de B, que es una solución más robusta, ya que soluciona el problema una vez para todos los proyectos futuros que se refieren a A. El archivo .targets del paquete NuGet contiene la siguiente sección:

<ItemGroup Condition="''$(ContentSQLiteInteropFiles)'' != '''' And ''$(ContentSQLiteInteropFiles)'' != ''false'' And ''@(SQLiteInteropFiles)'' != ''''"> <Content Include="@(SQLiteInteropFiles)"> <Link>%(RecursiveDir)%(FileName)%(Extension)</Link> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>

Esta sección agrega SQLite.Interop.dll como una referencia que debe copiarse a la salida del proyecto A y también a la salida de proyectos referentes (como B). Pero la propiedad MSBuild ContentSQLiteInteropFiles no está definida de forma predeterminada (no sé por qué) deshabilitando la referencia por la primera condición. Para habilitarlo, agregué la siguiente línea a un elemento PropertyGroup del archivo .csproj de proyectos A:

<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>

Tenga en cuenta que esta línea debe prececar el elemento Import para el archivo .targets del paquete NuGet.

Instalé System.Data.SQLite Core (x86 / x64) de NuGet . Se construyó sin advertencias, pero lanzó System.DllNotFoundException respecto a SQLite.Interop.dll . SQLite.Interop.dll mis proyectos para copiar el SQLite.Interop.dll desde debajo del directorio del paquete de NuGet al directorio de salida, y ahora se ejecuta sin la excepción.

¿Por qué el paquete NuGet no configuró mis proyectos para colocar la dll de interoperabilidad adecuada en el directorio de salida? Parece que debería ser capaz de hacer eso.

Soy nuevo en la interoperabilidad y heredé esta base de código, que anteriormente hacía referencia a System.Data.SQLite.dll directamente por ruta. Cambié a NuGet para deshacerme de las advertencias sobre una falta de coincidencia entre la arquitectura del procesador del proyecto frente a System.Data.SQLite . Estoy tratando de construir todos los proyectos como AnyCPU.



En mi caso, el SQL.Interop.dll no fue copiado por Nuget de ninguna manera, manualmente puso la versión correcta de la DLL en las carpetas x86 y x64 solucionó el problema.

Si ha instalado Sqlite de Nuget, puede encontrar el archivo SQL.Interop.dll en esta carpeta (para .NET 4.0)

PROJECT_FOLDER/packages/System.Data.SQLite.Core.1.0.*.*/build/net40


En mi caso, el archivo myProject.csproj no tenía definido el System.Data.SQLite.Core.targets . SQLite.Interop.dll la siguiente línea y x86 versiones x64 y x86 de SQLite.Interop.dll ahora se copian para todos los objetivos de compilación.

<Import Project="../packages/System.Data.SQLite.Core.1.0.98.1/build/net45/System.Data.SQLite.Core.targets" Condition="Exists(''../packages/System.Data.SQLite.Core.1.0.98.1/build/net45/System.Data.SQLite.Core.targets'')" />

No estoy seguro de qué ocurrirá cuando se actualice el paquete NuGet para System.Data.SQLite.Core y si la ruta del paquete deberá modificarse manualmente.


En mi caso, el problema fue el hecho de que estaba usando SQLite dentro de un proyecto de biblioteca de clases que luego fue utilizado por otro proyecto WPF (tipo gui).

Resolvió el SQL.Interop.dll que no se copiaba en el directorio de salida, usando el siguiente comando Post-Build, dentro de Propiedades del proyecto -> Eventos de compilación:

xcopy "$(SolutionDir)packages/System.Data.SQLite.Core.1.0.101.0/build/net451/x86/SQLite.Interop.dll" "$(OutputDir)" /y /f /y overwrites /f displays actual filenames being copied


Ninguna de las respuestas anteriores pareció funcionar para mí, tal vez porque estoy en VS2015, pero me pareció una buena razón para agregar mi propia solución a este problema.

Mi situación específica es la misma que la de @ Eternal21: tengo una interfaz de usuario de WPF que consume una biblioteca cliente que es la que tiene SQLite agregado a través de nuget. Y, sí, el problema fue que el Interop.dll no se copió en la aplicación de inicio (es decir, la interfaz de usuario de WPF que no tiene instalado SQLite).

La solución de simplemente agregar SQLite al proyecto WPF usando nuget es una solución rápida y fácil si tiene prisa.

Mi solución de mano dura usa XCOPY pero tiene la ventaja de copiar los directorios x86 y x64 y también hace frente a las versiones de depuración y lanzamiento. Su inconveniente es que contiene nombres de proyecto codificados. Puedo ver cómo puedes usar una macro para deshacerte de la primera, pero no puedo ver fácilmente cómo deshacerte de la segunda, así que tendrías que cambiarla manualmente si el nombre del proyecto cambia (pero esto es bastante raro) ).

Mi solución es usar estos comandos XCOPY en la construcción posterior del proyecto de inicio:

xcopy $(SolutionDir)DALProject/bin/$(ConfigurationName)/x64/SQLite.Interop.dll $(SolutionDir)WPFProject/bin/$(ConfigurationName)/x64/*.* /C /F /S /E /Y xcopy $(SolutionDir)DALProject/bin/$(ConfigurationName)/x86/SQLite.Interop.dll $(SolutionDir)WPFProject/bin/$(ConfigurationName)/x86/*.* /C /F /S /E /Y

/ C: continúa la copia, incluso si hay un error (tal vez no sea necesario).

/ F: muestra las rutas completas de los archivos que se están copiando (podría omitirse para limpiar la salida de la compilación).

/ S: copia los subdirectorios (que era la única forma en que podía crear los directorios / x86 y / x64).

/ E - Copia directorios y subdirectorios (tal vez duplicados / S).

/ Y: suprime el mensaje si el archivo de destino ya existe.

Configuré esto para que se ejecute solo en una compilación exitosa y funciona muy bien para mí. Espero que ayude a alguien.


Pensé que esto estaba sucediendo, ya que estaba copiando los archivos de mi carpeta de salida a otra ubicación cuando los implementé. Me faltó el hecho de que los archivos de interoperabilidad FUERON copiados, pero se copian en las carpetas x64 y x86 dentro de la carpeta de salida.

Si ejecuta msbuild en la depuración del proyecto, puede buscar referencias al destino CopySQLiteInteropFiles para asegurarse de que se está ejecutando.


Tengo un proyecto DLL que usa el paquete SQLite de nuget pero un proyecto de prueba para él siempre generaría la excepción DLL no encontrada.

La solución más sencilla que encontré fue agregar también el paquete de nuget SQLite al proyecto de prueba.


en mi caso, usando NuGet para instalar SQLite y aún necesito agregar manualmente SQliteinterop.dll como un recurso. Luego construyo muy proyecto y cuando lo publico funciona bien. (Trabajando con configuración x86)