引用 SQL 数据库项目 (SQLCLR) 引发“找不到类型或命名空间”错误

Posted

技术标签:

【中文标题】引用 SQL 数据库项目 (SQLCLR) 引发“找不到类型或命名空间”错误【英文标题】:Reference to SQL Database Project (SQLCLR) Throws "type or namespace could not be found" Error 【发布时间】:2014-05-19 20:34:47 【问题描述】:

我已经花了 1 1/2 天的时间在谷歌上搜索这个问题的解决方案,但无济于事。

我无法在另一个项目中从代码中引用已编译的 SQLCLR 程序集。我可以添加对另一个项目的引用,但是当我尝试添加“使用”指令以在代码中包含引用的组件时,我收到“找不到类型或命名空间名称‘Database1’(您是否缺少使用指令还是程序集引用?)”

这是我所做的:

    使用 VS 2012/2013 我创建了一个空白解决方案。 添加了一个针对 SQL Server 2012 和 .Net 4.5 框架(不是客户端配置文件)的新 SQL Server 数据库项目 (Database1)。 向解决方案添加了一个新的命令行/winform/web 应用程序/whatever 项目 (TestConsoleApplication1),它还针对 .Net 4.5 框架(不是客户端配置文件)。 添加了对 Database1 程序集的引用(也尝试过项目引用),并将 System.Data 程序集添加到 TestConsoleApplication1 项目。 在我创建 TestConsoleApplication1 项目时自动添加的默认类中添加了 System.Data 程序集的 using 指令。 尝试将 Database1 程序集的 using 指令添加到我创建 TestConsoleApplication1 项目时自动添加的默认类。 尝试为 Database1 程序集添加 using 指令时,程序集名称未出现在智能感知中,并且键入程序集名称会导致 Database1 下出现“红色曲线”。 尝试构建项目,导致“找不到类型或命名空间名称 'Database1'(您是否缺少 using 指令或程序集引用?)”错误。 已检查、双重、三重、四重...n-tuple-检查两个项目是否针对相同的 .Net Framework 版本 (4.5)。

Database1 没有代码,这里是“客户端”应用程序 (TestConsoleApplication1) 的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Database1; //Marked as design-time error, and throws ERROR on build

namespace TestConsoleApplication1

    class Program
    
        static void Main(string[] args)
        


        
    

有人知道为什么我可以添加对 SQLCLR 程序集的引用,但“客户端”项目代码似乎无法真正“看到”或访问引用的程序集吗?

【问题讨论】:

你确定你有正确的命名空间吗?即,程序集可能命名为Database1,但命名空间可能类似于CompanyName.Database1 或类似的名称? using 指令使用命名空间,项目引用使用程序集名称。 是的。由于这只是一个“测试”解决方案,因此命名空间和程序集名称是相同的(Database1)。谢谢。 【参考方案1】:

您的 .net 控制台项目无法引用 SQLCLR 项目中的 .Net 程序集,因为它会在您发布时嵌入到数据库中。它确实可以编译为 DLL,但将依赖于 Microsoft Sql Server 库,并且通常会在相同的连接上下文与定义的连接字符串下运行以与数据库对话。两个项目都可以引用第三个共享程序集,然后将 SQLCLR .net 代码直接添加到数据库项目中,该数据库项目只是将共享代码作为包装器调用。

【讨论】:

很抱歉,但事实并非如此。我可以添加对另一个 SQLCLR 程序集的引用,并且可以通过 using 指令访问命名空间。我尝试创建具有相同属性的 Database1 程序集(甚至使用强密钥文件名签名),但我无法在“客户端”应用程序中访问它。我似乎遗漏了一些东西,或者在我安装 VS 2013 时引入了异常。无论如何,我知道我正在尝试做的事情是可行的,或者至少以前已经做过。谢谢。

以上是关于引用 SQL 数据库项目 (SQLCLR) 引发“找不到类型或命名空间”错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL CLR 中的多线程缓存

Visual Studio 2010 中 SQLCLR 项目中的计算列

访问从 SQL Server 中的 SQLCLR 存储过程返回的 SqlXml

数据库项目vs2010中缺少部署选项卡

SQL触发器调用.NET的类方法续SQLCLR应用

基于SQL Server版本的SQL CLR条件编译