SSDT添加要部署的程序集

时间:2013-11-04 14:45:13

标签: wcf visual-studio-2012 deployment .net-assembly sql-server-data-tools

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

但是我决定转到VS 2012上的SSDT项目。我从空数据库导入了项目。 WCF功能取决于.net framework

中的几个程序集
SMdiagnostics
System.Web
System.Messaging
system.identitymodel
system.identitymodel.selectors
microsoft.transactions.bridge
System.ServiceModel

所以我在项目中引用了这些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

我收到错误

  

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

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

感谢。

1 个答案:

答案 0 :(得分:9)

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

  1. 在“解决方案资源管理器”中,展开项目并右键单击“引用”。
  2. 在“添加引用”窗口中,浏览程序集或从“程序集”类别中选择。
  3. 右键单击添加的部件,然后单击“属性”。
  4. 确保设置了以下属性:
    • 生成Sql脚本:True
    • Model Aware:True
    • 权限设置:安全/外部/不安全(取决于组件)
  5. 按F5部署到LocalDB / Debug目标或选择发布和生成脚本以验证更改。
  6. DACPAC(SSDT构建的结果)不允许CREATE ASSEMBLY使用路径,因为不包含DLL并且无法保证其他主机上的路径。因此,DACPAC中只允许嵌入的二进制文字。