Assembly de referência no sqlproj não está sendo implementado no servidor

9

Eu tenho um projeto de banco de dados do Visual Studio 2013 que usa uma versão modificada do fastJSON como referência. Selecionei Gerar DDL nas propriedades de referência, conforme mostrado nesta captura de tela:

painel de propriedades fastJSON

E no arquivo .sqlproj msbuild:

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

No entanto, bin / debug / Project.sql não contém uma linha para CREATE ASSEMBLY fastJSON . . .. Adicionar a montagem manualmente funciona e meu projeto será implantado e executado. O que faço para obter o Visual Studio para implantar meu assembly?

Justin Dearing
fonte
5
Hmmm ... o nosso está definido como False, e Model Awareestá definido como True, e obtemos um CREATE ASSEMBLYna saída. Talvez tente essas configurações e veja o que acontece?
21414 Jon Jones-

Respostas:

10

Eu brinquei um pouco para descobrir o que essas configurações fazem ... quando comentei, apenas mencionei quais são nossas configurações sem entendê-las; Eu não sou o líder do projeto para nossa migração para projetos de banco de dados, por isso não estava familiarizado com as minúcias desse material.

A Model Awarepropriedade precisa ser definida como True.

Essa propriedade está mal documentada, mas, pelo que entendi, a habilitação exporá os objetos dentro do assembly ao modelo de banco de dados, para que possam ser usados ​​nos wrappers SQLCLR (ou seja, CREATE ... EXTERNAL ...) e as referências possam ser resolvidas. Se o projeto não incluir esses objetos no modelo, não haverá como eles serem roteirizados na saída. Além disso, se houver uma referência a um objeto na montagem e essa propriedade estiver configurada como False, o projeto falhará ao criar.

A Generate Sql Scriptpropriedade que mencionei está em um estado semelhante de documentação. Isso controla se os membros publicamente visíveis na montagem são automaticamente roteirizados na saída. Nós o desativamos para manter a flexibilidade de renomear os wrappers SQLCLR e incluir seletivamente apenas os objetos de que precisamos. O modo como você define isso fica a seu critério.

Espero que ajude a documentação pública dessas propriedades!

Jon Seigel
fonte
Obrigado por este Jon! Foi corrigido o erro "incapaz de resolver o token".
Rolan
Onde exatamente o "Model Aware" está definido como verdadeiro?
Nh43de 5/03
Model Awaree outras propriedades podem ser definidas clicando com o botão direito do mouse na DLL referenciada e selecionando Properties.
d12