SSDT添加要部署的程序集

Ale*_*exS 2 deployment wcf .net-assembly visual-studio-2012 sql-server-data-tools

我有一个旧项目,它使用WCF来为SQL Server提供C#CLR触发器.我总是通过运行脚本来安装它.

但是我决定转到VS 2012上的SSDT项目.我从空数据库导入了项目.WCF功能取决于.net框架中的几个程序集

SMdiagnostics
System.Web
System.Messaging
system.identitymodel
system.identitymodel.selectors
microsoft.transactions.bridge
System.ServiceModel
Run Code Online (Sandbox Code Playgroud)

所以我在项目中引用了这些dll.我还将它们添加到Assemblies子文件夹下的项目中.

但是,当我创建部署脚本时,这些程序集不在其中.

所以当我尝试将脚本发布到数据库时,我收到一个错误.

程序集'system.servicemodel,version = 3.0.0.0,culture = neutral,publickeytoken = b77a5c561934e089.' 在SQL目录中找不到.

如果我尝试创建自定义脚本以将程序集添加到db:

create assembly [SMdiagnostics]
from  'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMdiagnostics.dll'
with permission_set = unsafe
go
Run Code Online (Sandbox Code Playgroud)

我收到错误

错误:SQL70502:程序集源无效.只允许二进制文字.

如何从.NET添加程序集以与我的SSDT项目一起部署?

谢谢.

小智 9

要将.NET程序集添加到SSDT项目:

  1. 在解决方案资源管理器中,展开项目并右键单击"引用".
  2. 在"添加引用"窗口中,浏览程序集或从"程序集"类别中进行选择.
  3. 右键单击添加的程序集,然后单击"属性".
  4. 确保设置了以下属性:
    • 生成Sql脚本:True
    • 模型意识:真的
    • 权限设置:安全/外部/不安全(取决于组件)
  5. 按F5以部署到LocalDB/Debug目标,或选择"发布并生成脚本"以验证更改.

DACPAC(SSDT构建的结果)不允许CREATE ASSEMBLY使用路径,因为不包含DLL并且无法保证其他主机上的路径.因此,DACPAC中只允许嵌入的二进制文字.