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

Baa*_*ali 5 sql-server sqlclr sql-server-data-tools visual-studio-2015

我们正在使用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
Run Code Online (Sandbox Code Playgroud)

--update

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

SQL46010:附近的语法不正确在此输入图像描述

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

Sol*_*zky 5

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

您需要转到“解决方案资源管理器”中的“参考”文件夹,并将程序集的“模型感知”属性更改为“真”(此步骤解决了以下SO问题中的相同错误:如何解决VS2013错误SQL71501:过程X对组件Y?的引用尚未解决。如果您手动添加引用,则“模型感知”可能默认为“假”。

通过导入项目(“模型感知”设置已设置为“真”)并将其设置为“假”以获取错误并返回“真”以删除该错误,我能够重现此错误(和修复)。错误。


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

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


小智 4

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

  • @user1490835和user3468420:我明白了。将“目标平台”更改为 2012,然后更改为 2008(并且在设置为 2012 时无需进行重建),但这只是因为更改目标平台的作用:它删除了 **$ProjectDir\project_name.dbmdl* * 文件!当项目当前未加载到 Visual Studio 中时,可以手动完成此操作。 (3认同)