【问题标题】:How to resolve VS2013 Error SQL71501: Procedure X has an unresolved reference to Assembly Y?如何解决 VS2013 错误 SQL71501:过程 X 对程序集 Y 的引用未解决?
【发布时间】:2014-05-22 16:25:22
【问题描述】:

作为我们从 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].

构建成功缺少什么?

【问题讨论】:

    标签: sql-server visual-studio visual-studio-2013 sqlclr


    【解决方案1】:

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

    一旦我这样做了,构建就成功完成了。

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2015-08-20
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多