作为我们从Visual Studio 2010升级到2013的努力的一部分,我正在查看需要EXTERNAL
访问权限的几个SQL Server CLR存储过程,并且为此目的将在单独的程序集中隔离。我几乎没有任何东西可以轻松地建造,但这给了我一些麻烦。
由于有问题的程序集使用了新的.sqlproj
项目类型显然根本不喜欢的Web引用,并且能够继续,我们决定使用VS2010 SP1单独构建该程序集并引用已编译的程序集DLL。组装本身构建得很好,VS2013对引用本身没有任何抱怨。
以下是SQL CLR SP的外观(请不要问我地球上分号在那里做了什么):
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
using System.Text;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static int SQLCLR1(
SqlString in1,
SqlString in2,
SqlString in3,
SqlString in4,
SqlString in5
)
{
// ... code elided ... //
}
};
SQL方面:
CREATE PROCEDURE [dbo].[SQLCLR1]
@in1 [nvarchar](4000),
@in2 [nvarchar](4000),
@in3 [nvarchar](4000),
@in4 [nvarchar](4000),
@in5 [nvarchar](4000)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [External].[StoredProcedures].[SQLCLR1]
GO
An answer by AaronLS将AS EXTERNAL NAME
说明符的格式设为:
AS EXTERNAL NAME [AssemblyName].[ClassName].[FunctionName]
数据库项目将程序集称为External.dll
,在“应用程序”下的VS2010项目属性中,“程序集名称”为“外部”。在VS2013端,解决方案资源管理器将引用显示为“外部”,这在SqlServer - >下的属性窗口中进行镜像。装配名称。
然而,当我尝试在VS2013端构建数据库项目时,它会发出错误,例如(每个CLR SP一个):
12>D:\Source\...\SQLCLR1.proc.sql(9,16): Error: SQL71501: Procedure: [dbo].[SQLCLR1] has an unresolved reference to Assembly [External].
构建成功的缺失是什么?
答案 0 :(得分:9)
在VS 2013方面,我必须将DLL引用上的 Model Aware 属性设置为 True 。
完成后,构建成功完成。