如何解决VS2013错误SQL71501:过程X有一个未解析的程序集Y引用?

a C*_*CVn 4 sql-server sqlclr visual-studio visual-studio-2013

作为我们从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 ... //
    }
};
Run Code Online (Sandbox Code Playgroud)

而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
Run Code Online (Sandbox Code Playgroud)

AaronLS的答案给出了AS EXTERNAL NAME说明符的格式:

AS EXTERNAL NAME [AssemblyName].[ClassName].[FunctionName]
Run Code Online (Sandbox Code Playgroud)

数据库项目将程序集称为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].
Run Code Online (Sandbox Code Playgroud)

构建成功的缺失是什么?

a C*_*CVn 9

在VS 2013方面,我不得不将DLL引用上的Model Aware属性设置为True.

完成后,构建成功完成.