El ensamblado de referencia en sqlproj no se implementa en el servidor

9

Tengo un proyecto de base de datos de Visual Studio 2013 que toma una versión modificada de fastJSON como referencia. Seleccioné Generar DDL en las propiedades de referencia como se muestra en esta captura de pantalla:

panel de propiedades fastJSON

Y en el archivo .sqlproj msbuild:

<Reference Include="fastJSON">
  <HintPath>..\..\fastjson\output\net40\fastJSON.dll</HintPath>
  <GenerateSqlClrDdl>True</GenerateSqlClrDdl>
</Reference>

Sin embargo, bin / debug / Project.sql no contiene una línea para CREATE ASSEMBLY fastJSON . . .. Agregar el ensamblaje funciona manualmente y mi proyecto se implementará y ejecutará. ¿Qué debo hacer para que Visual Studio implemente mi ensamblado?

Justin Dearing
fuente
55
Hmmm ... el nuestro está configurado para False, y Model Awareestá configurado para True, y obtenemos un CREATE ASSEMBLYen la salida. Tal vez intente esa configuración y vea qué sucede.
Jon Seigel

Respuestas:

10

Jugué un poco para descubrir qué hacen estas configuraciones ... cuando comenté, solo mencioné cuáles son nuestras configuraciones sin entenderlas; No soy el líder del proyecto para nuestra migración a Proyectos de base de datos, por lo que no estaba familiarizado con las minucias de estas cosas.

La Model Awarepropiedad debe establecerse en True.

Esta propiedad está mal documentada, pero desde mi punto de vista, habilitarla expondrá los objetos dentro del ensamblaje al modelo de base de datos para que puedan usarse en los contenedores SQLCLR (es decir, CREATE ... EXTERNAL ...) y las referencias puedan resolverse. Si el proyecto no incluye estos objetos en el modelo, no hay forma de que se escriban en la salida. Además, si hay una referencia a un objeto en el ensamblaje y esta propiedad se establece en False, el proyecto no se generará.

La Generate Sql Scriptpropiedad que mencioné se encuentra en un estado similar de documentación. Esto controla si los miembros visibles públicamente en el ensamblado se crean automáticamente en la salida. Lo hemos deshabilitado para conservar la flexibilidad de renombrar los envoltorios SQLCLR e incluir selectivamente solo los objetos que necesitamos. La forma en que configura esto depende de su discreción.

¡Ojalá eso ayude a la documentación pública de estas propiedades!

Jon Seigel
fuente
Gracias por esto Jon! Solucionó mi error "no se puede resolver el token".
Rolan
¿Dónde exactamente se establece "Model Aware" en verdadero?
nh43de
Model Awarey otras propiedades se pueden establecer haciendo clic derecho en el archivo DLL al que se hace referencia y seleccionando Properties.
d12