L'assembly de référence dans sqlproj n'est pas déployé sur le serveur

9

J'ai un projet de base de données Visual Studio 2013 qui prend une version modifiée de fastJSON comme référence. J'ai sélectionné Générer DDL dans les propriétés de référence comme indiqué dans cette capture d'écran:

panneau de propriétés fastJSON

Et dans le fichier msbuild .sqlproj:

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

Cependant bin / debug / Project.sql ne contient pas de ligne pour CREATE ASSEMBLY fastJSON . . .. L'ajout de l'assemblage fonctionne manuellement et mon projet sera ensuite déployé et exécuté. Que dois-je faire pour que Visual Studio déploie mon assembly?

Justin Dearing
la source
5
Hmmm ... le nôtre est défini sur False, et Model Awareest défini sur True, et nous obtenons un CREATE ASSEMBLYdans la sortie. Essayez peut-être ces paramètres et voyez ce qui se passe?
Jon Seigel

Réponses:

10

J'ai joué un peu pour comprendre ce que font ces paramètres ... quand j'ai commenté, j'ai seulement mentionné ce que sont nos paramètres sans les comprendre; Je ne suis pas le chef de projet pour notre migration vers des projets de base de données, donc je ne connaissais pas les détails de ce genre de choses.

La Model Awarepropriété doit être définie sur True.

Cette propriété est mal documentée, mais d'après ce que je comprends, l'activer exposera les objets de l'assembly au modèle de base de données afin qu'ils puissent être utilisés dans les wrappers SQLCLR (c'est-à-dire CREATE ... EXTERNAL ...) et que les références puissent être résolues. Si le projet n'inclut pas ces objets dans le modèle, il est impossible qu'ils soient scriptés dans la sortie. En outre, s'il existe une référence à un objet dans l'assembly et que cette propriété est définie sur False, le projet ne pourra pas être généré.

La Generate Sql Scriptpropriété que j'ai mentionnée est dans un état de documentation similaire. Cela contrôle si les membres publiquement visibles de l'assembly sont automatiquement scriptés dans la sortie. Nous l'avons désactivé pour conserver la flexibilité de renommer les wrappers SQLCLR et d'inclure sélectivement uniquement les objets dont nous avons besoin. La façon dont vous définissez cela est à votre discrétion.

Espérons que cela aide la documentation publique de ces propriétés!

Jon Seigel
la source
Merci pour ce Jon! Il a corrigé mon erreur "impossible de résoudre le jeton".
Rolan
Où exactement "Model Aware" est-il défini sur true?
nh43de
Model Awareet d'autres propriétés peuvent être définies en cliquant avec le bouton droit sur la DLL référencée et en les sélectionnant Properties.
d12