visual studio servicio datos compact basada archivo abrir c# .net msbuild visual-studio-2015 ssdt

c# - compact - base de datos basada en servicio visual studio



Uso del compilador incorrecto durante la creación del proyecto de la base de datos de SQL Server (3)

Necesitará apuntar a la versión de clr que usa la versión de SQL que implementará:

SQL 2005-2008 R2 = CLR 2

SQL 2012 = CLR 4

No puedo simplemente ejecutar cualquier versión del clr que está en la máquina, me temo.

ed

Tengo un problema con la compilación de SSDT SQL Server Database Project utilizando Visual Studio 2015. Quiero usar las características C # 6 dentro de mi proyecto de base de datos, pero parece que no es compatible. Por ejemplo, he agregado la siguiente clase en mi proyecto de db:

namespace Database1 { class ClassFile1 { public string Str { get; } = string.Empty; } }

Intenté compilar esto, pero obtuve el error:

CS1519: token no válido ''='' en clase, estructura o declaración de miembro de interfaz

Descubrí que el motivo de este error es una versión incorrecta del compilador que usa VS 2015. La siguiente línea de compilación la genera VS:

C:/Windows/Microsoft.NET/Framework/v4.0.30319/Csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /errorendlocation /preferreduilang:en-US /highentropyva+ /reference:"C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.6/mscorlib.dll" /debug+ /debug:full /optimize- /out:obj/Debug/Database2.dll /subsystemversion:6.00 /target:library /warnaserror- /utf8output ClassFile1.cs

Como puede ver, se usa C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Csc.exe y es incorrecto.

He intentado compilar el proyecto db desde Developer Command Prompt para VS 2015 y esto se hizo con éxito, porque dentro de este prompt csc.exe es el compilador Roslyn (C: / Archivos de programa (x86) / MSBuild / 14.0 / Bin / csc.exe) que soporta las características C # 6. Puede consultar la pregunta ¿Cómo ejecutar Roslyn en su lugar csc.exe desde la línea de comandos?

Traté de compilar el proyecto usando MSBuild 14.0 y también lo hice con éxito.

La pregunta es: ¿cómo puedo cambiar / anular la versión del compilador que mi VS usó para la compilación del proyecto SSDT DB desde el antiguo C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Csc.exe al nuevo compilador Roslyn (C: / Archivos de programa (x86) / MSBuild / 14.0 / Bin / csc.exe)?


Intentaba hacer esto también y enfrenté el mismo problema. Mi solución es crear un proyecto de biblioteca de clase regular por separado. Moví el código C # de mi proyecto de Base de Datos a la nueva biblioteca (que será compilada usando C # 6 / Roslyn por VS 2015). Y luego haga referencia a esta biblioteca de clase desde mi proyecto de Base de datos.

Simplemente recuerde establecer las propiedades de la referencia a la biblioteca de la clase: Model Aware = true y Generate Sql Script = true. No lo he probado a fondo, pero pude implementarlo desde mi proyecto de base de datos utilizando el comando de publicación y llamar a la función dentro de la biblioteca de clases.


¡Buenas noticias!
Visual Studio 2017 utilizará el compilador actual de C # para los proyectos de base de datos SSDT, por lo que todas las funciones de
C # 6 finalmente funcionará en los ensamblados de SQL Server.

La ruta del compilador utilizado es:

C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/MSBuild/15.0/Bin/csc.exe

Debido a que todas las características de C # 6 son solo características de compilación pura, ahora incluso puede usarlas si solo está apuntando a .NET 3.5 y SQL Server 2008.

En Visual Studio 2017 RC, también pude usar algunas características de C # 7 como constructores de cuerpo de expresión, las nuevas variables de out , retornos de ref , el switch/is mejorado switch/is coincidencia de patrón y los literales binarios / hexadecimales mejorados. Pero no pude usar funciones locales ni nada relacionado con tuplas como los nuevos tipos de retorno de tupla, los literales de tupla o la nueva declaración de deconstrucción.
Tal vez este comportamiento cambie en el lanzamiento final de Visual Studio 2017.