SQL 71501 有一个未解析的程序集引用

问题描述 投票:0回答:2

我们正在使用 SSDT 工具,将 Visual Studio 2015 和目标平台设置为 SQL Server 2008。我们被这个抛出错误的函数所困扰,需要帮助来修复它。

SQL71501:函数:[dbo].[GetFormattedAddress] 具有对程序集 [AddressFormatting] 的未解析引用

CREATE FUNCTION [dbo].[GetFormattedAddress]
(@AddressID INT, @CompleteAddress BIT)
RETURNS NVARCHAR (4000)
AS
EXTERNAL NAME [AddressFormatting].[AddressFormatting.UserDefinedFunctions].[GetFormattedAddress]
GO

--更新

在 Assemblies 文件夹下,对于 AddressFormatting.dll,我将 BuildAction 设置为 Build,然后在 References 下我设法看到了 Model Aware 属性,现在我已将其设置为 True。之后,我收到以下错误:

SQL46010:附近语法不正确

指向错误的文件是

AddressFormatting.dll

sql-server visual-studio-2015 sql-server-data-tools sqlclr
2个回答
8
投票

这个问题完全在 SSDT 中,与架构或将程序集加载到 GAC 无关(这两个问题都在问题的评论中提到)。由于某种原因,即使您将程序集从 SQL Server 引入到您的项目中,SSDT 也看不到它。您在对该问题的评论中提到您“将该程序集作为我的项目中的参考导入”,但这可能应该像我的测试中那样自动发生。

您需要转到“解决方案资源管理器”中的“References”文件夹,并将程序集的“Model Aware”属性更改为“True”(此步骤解决了此 S.O. 问题中的相同错误:如何解决 VS2013 错误 SQL71501 :过程 X 对程序集 Y 有未解析的引用?)。如果您手动添加引用,“Model Aware”可能默认为“False”。

我能够通过导入项目(“Model Aware”设置已设置为“True”)并将其设置为“False”以获取错误并返回到“True”以删除来重现此错误(以及修复)错误。


此外,如果由于某种原因您确实遇到了该错误,并且“正确的”设置似乎不起作用,即使在执行“清理解决方案”、“重建解决方案”,甚至关闭并重新启动 Visual Studio 之后,那么你需要删除 $(ProjectDir)\project_name.dbmdl 文件。为了删除该文件,该项目无法在 Visual Studio 中打开,因为它将被 Visual Studio 锁定。或者,您可以转到“项目属性”,然后在“项目设置”选项卡上,将“目标平台”更改为另一个版本,然后返回到原来的版本(与其他答案中描述的类似,但不需要在将其翻转回原始版本之前执行“构建”或“重建”),因为这会产生删除该 .dbmdl 文件的副作用。

请注意,直到项目关闭后才会写入 .dbmdl 文件。因此,如果您第一次打开项目时该文件不存在,或者切换“目标平台”,那么您将看不到 .dbmdl 文件,直到您关闭解决方案、卸载项目或退出视觉工作室。执行“全部保存”不会将此文件写入磁盘!


4
投票

我也遇到了这个问题,通过将 Visual Studio 中的 SQL 兼容性级别更改为 2012,重新编译项目,然后将其更改回 2008 的兼容性级别,然后执行一个干净的项目,然后重新编译,它得到了神秘的解决。

© www.soinside.com 2019 - 2024. All rights reserved.