Referenzassembly in sqlproj wird nicht auf dem Server bereitgestellt

9

Ich habe ein Visual Studio 2013-Datenbankprojekt, das eine modifizierte Version von fastJSON als Referenz verwendet. Ich habe in den Referenzeigenschaften die Option DDL generieren ausgewählt, wie in diesem Screenshot gezeigt:

fastJSON-Eigenschaftenfenster

Und in der .sqlproj msbuild-Datei:

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

Bin / debug / Project.sql enthält jedoch keine Zeile für CREATE ASSEMBLY fastJSON . . .. Das manuelle Hinzufügen der Assembly funktioniert und mein Projekt wird dann bereitgestellt und ausgeführt. Was kann ich tun, damit Visual Studio meine Assembly bereitstellt?

Justin Dearing
quelle
5
Hmmm ... unsere ist auf Falseund auf Model Awareeingestellt True, und wir bekommen eine CREATE ASSEMBLYin der Ausgabe. Vielleicht versuchen Sie diese Einstellungen und sehen, was passiert?
Jon Seigel

Antworten:

10

Ich habe ein bisschen herumgespielt, um herauszufinden, was diese Einstellungen bewirken ... Als ich kommentierte, erwähnte ich nur, was unsere Einstellungen sind, ohne sie zu verstehen. Ich bin nicht der Projektleiter für unsere Migration zu Datenbankprojekten, daher war ich mit den Details dieses Materials nicht vertraut.

Die Model AwareEigenschaft muss auf gesetzt werden True.

Diese Eigenschaft ist schlecht dokumentiert, aber nach meinem Verständnis werden die Objekte in der Assembly für das Datenbankmodell verfügbar gemacht, damit sie in den SQLCLR-Wrappern (dh CREATE ... EXTERNAL ...) verwendet und die Referenzen aufgelöst werden können. Wenn das Projekt diese Objekte nicht in das Modell einbezieht, können sie auf keinen Fall in der Ausgabe skriptiert werden. Wenn sich in der Assembly ein Verweis auf ein Objekt befindet und diese Eigenschaft auf festgelegt ist, Falsekann das Projekt nicht erstellt werden.

Die von Generate Sql Scriptmir erwähnte Eigenschaft befindet sich in einem ähnlichen Dokumentationszustand. Hiermit wird gesteuert, ob die öffentlich sichtbaren Elemente in der Assembly automatisch in die Ausgabe geschrieben werden. Wir haben es deaktiviert, die Flexibilität beizubehalten, die SQLCLR-Wrapper umzubenennen und selektiv nur die Objekte einzuschließen, die wir benötigen. Welche Art und Weise Sie dies einstellen, liegt in Ihrem Ermessen.

Hoffentlich hilft das der öffentlichen Dokumentation dieser Eigenschaften!

Jon Seigel
quelle
Danke für diesen Jon! Der Fehler "Token kann nicht aufgelöst werden" wurde behoben.
Rolan
Wo genau ist "Model Aware" auf "true" gesetzt?
nh43de
Model Awareund andere Eigenschaften können festgelegt werden, indem Sie mit der rechten Maustaste auf die referenzierte DLL klicken und auswählen Properties.
12.