Quiero construir un .sqlproj dentro de un contenedor de Linux. El problema es que la construcción de .sqlproj depende de SSDT y hasta ahora no puedo encontrar SSDT que se pueda instalar de forma independiente en Linux .
Error que veo al ejecutar 'dotnet msbuild' en mi contenedor:
error MSB4019: The imported project "/usr/share/dotnet/sdk/2.2.402/Microsoft/VisualStudio/v11.0/SSDT/Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.Al buscar el problema en el archivo .sqlproj, veo que estamos tratando de importar un archivo Schema.SqlTasks.targets, que supongo que SSDT crea:
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />Veo el mismo error probando 'dotnet build'
Hay una opción independiente de Windows:
https://www.nuget.org/packages/Microsoft.Data.Tools.Msbuild/10.0.61804.210
¿Alguien ha encontrado una manera de proporcionar SSDT en un contenedor de Linux?
Estado objetivo: el paso de compilación para generar los dacpacs ocurriría dentro del contenedor.
Estado actual: por ahora estoy usando Visual Studio en mi máquina como la máquina de compilación, luego copio los dacpacs en el contenedor donde sqlpackage.exe puede publicar el esquema.
¿Por qué Linux? Esta base de datos dockerizada admitirá una pila de servicios que se ejecutan en contenedores de Linux, por lo que un contenedor de Windows no es ideal.
Bien, con un poco de ayuda de ErikEJ y otros miembros de la comunidad, en el enlace de GitHub que Brett Rowberry te proporcionó en los comentarios, finalmente descubrí cómo hacer esto.
Los pasos a seguir son bastante sencillos.
Una vez que haya hecho esto, encontrará que aún tiene acceso al proyecto de base de datos SQL en Visual Studio, y obtiene todo el resaltado de sintaxis e inteligencia, pero su CI compilará el código SQL a través de la biblioteca de clases vinculada y producirá un dacpac en su carpeta de salida está lista para ser implementada.
Hacer clic con el botón derecho en el proyecto le permitirá compilarlo desde Visual Studio, y hacer clic con el botón derecho y seleccionar "Publicar" le permitirá especificar los parámetros de su base de datos y publicarlo en el servidor de base de datos que se está utilizando. Si ya tiene otros objetos en su base de datos a los que necesita hacer referencia, puede crear un objeto solo dacpac desde la base de datos, utilizando SQL Server Management Studio, que luego puede agregar a su proyecto y verificar con sus fuentes para que lo haga no es necesario recrear todos los objetos que ya tenga.
Escribí una publicación de blog que lo explica todo detalladamente aquí: https://shawtyds.wordpress.com/2020/08/26/using-a-full-framework-sql-server-project-in-a-net- proyecto-central-construir/
Tuve el mismo problema que hice como solución:
1- Script sql generado del proyecto de base de datos "Generar script"
2- Seguí este ejemplo de código para ejecutar el script en el contenedor de Linux
https://github.com/microsoft/mssql-docker/issues/2#issuecomment-547699532
https://github.com/lkurzyniec/netcore-boilerplate/tree/master/db/mssql
https://github.com/lkurzyniec/netcore-boilerplate/blob/master/docker-compose.yml