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

时间:2016-12-09 08:02:11

标签: sql-server visual-studio-2015 sql-server-data-tools sqlclr

我们正在使用SSDT工具将Visual Studio 2015和目标平台设置为SQL Server 2008.我们坚持使用此功能,这会导致错误并需要我们可以做些什么来解决它。

 SQL71501: Function: [dbo].[GetFormattedAddress] has an unresolved reference to Assembly [AddressFormatting]


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

GO

- UPDATE

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

SQL46010:enter image description here

附近的语法不正确

它指向错误的文件是AddressFormatting.dll

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

此问题完全在SSDT内,与Schemas无关或将程序集加载到GAC(这两个问题都在评论中提到)。出于某种原因,即使你将程序集从SQL Server带入了你的项目,SSDT也没有看到它。您在评论中提到您“将该程序集作为项目中的引用导入”,但这可能应该像我在测试中一样自动发生。

您需要转到“解决方案资源管理器”中的“参考”文件夹,并将大会的“模型识别”属性更改为“真”(此步骤解决了此SO问题中的相同错误:How to resolve VS2013 Error SQL71501: Procedure X has an unresolved reference to Assembly Y? )。如果手动添加引用,“Model Aware”可能默认为“False”。

我能够通过导入项目(“模型识别”设置已设置为“True”)重现此错误(和修复)并将其设置为“False”以获取错误并返回“True”删除错误。

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

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