SQL71501 有未解析的程序集引用
SQL 71501 has an unresolved assembly reference
我们正在使用 Visual Studio 2015 和目标平台设置为 SQL Server 2008 的 SSDT 工具。我们被这个抛出错误的函数困住了,需要帮助我们可以做什么修复它。
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
--更新
在 Assemblies 文件夹下,对于 AddressFormatting.dll,我将 BuildAction 设置为 Build,然后在 References 下我设法看到我现在设置为 True 的 Model Aware 属性。在此之后我得到以下错误:
SQL46010:
附近的语法不正确
错误指向的文件是AddressFormatting.dll
这个问题完全在 SSDT 中,与模式或将程序集加载到 GAC 无关(这两个问题都在问题的评论中提到)。出于某种原因,即使您将程序集从 SQL 服务器带到您的项目中,SSDT 也看不到它。您在对问题的评论中提到您 "imported that assembly as a reference in my project",但这可能应该像在我的测试中那样自动发生。
您需要转到 "Solution Explorer" 中的 "References" 文件夹,并将 "Model Aware" 属性 更改为 "True" 以进行组装(此步骤解决了在这个 S.O. 问题中同样的错误:How to resolve VS2013 Error SQL71501: Procedure X has an unresolved reference to Assembly Y?)。如果您手动添加引用,"Model Aware" 可能默认为 "False".
我能够通过导入项目("Model Aware" 设置已设置为 "True")重现此错误(和修复)并将其设置为 "False" 以获取错误并返回 "True" 以删除错误。
此外,如果由于某种原因您确实遇到了该错误并且 "proper" 设置似乎不起作用,即使在执行了 "Clean Solution"、"Rebuild Solution" 和即使关闭并重新启动 Visual Studio,则需要删除 $(ProjectDir)\project_name.dbmdl 文件。为了删除该文件,项目无法在 Visual Studio 中打开,因为它将被 Visual Studio 锁定。或者,您可以转到项目属性,然后在 "Project Settings" 选项卡上,将 "Target platform" 更改为另一个版本,然后再恢复为原来的状态(类似于其他答案中描述的内容,但有在将其翻转回原始版本之前无需执行 "build" 或 "rebuild"),因为这会产生删除 .dbmdl 文件的副作用。
请注意,.dbmdl 文件只有在项目关闭后才会被写入。因此,如果您第一次打开项目时该文件不存在,或者如果您切换 "Target platform",那么在您关闭之前您将看不到 .dbmdl 文件解决方案、卸载项目或退出 Visual Studio。执行 "Save All" 不会将此文件写入磁盘!
我也有这个问题,通过将 Visual Studio 中的 SQL 兼容性级别更改为 2012,重新编译项目,然后将其更改回 2008 的兼容性级别,然后执行一个干净的项目,然后重新编译。
我们正在使用 Visual Studio 2015 和目标平台设置为 SQL Server 2008 的 SSDT 工具。我们被这个抛出错误的函数困住了,需要帮助我们可以做什么修复它。
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
--更新
在 Assemblies 文件夹下,对于 AddressFormatting.dll,我将 BuildAction 设置为 Build,然后在 References 下我设法看到我现在设置为 True 的 Model Aware 属性。在此之后我得到以下错误:
SQL46010:
错误指向的文件是AddressFormatting.dll
这个问题完全在 SSDT 中,与模式或将程序集加载到 GAC 无关(这两个问题都在问题的评论中提到)。出于某种原因,即使您将程序集从 SQL 服务器带到您的项目中,SSDT 也看不到它。您在对问题的评论中提到您 "imported that assembly as a reference in my project",但这可能应该像在我的测试中那样自动发生。
您需要转到 "Solution Explorer" 中的 "References" 文件夹,并将 "Model Aware" 属性 更改为 "True" 以进行组装(此步骤解决了在这个 S.O. 问题中同样的错误:How to resolve VS2013 Error SQL71501: Procedure X has an unresolved reference to Assembly Y?)。如果您手动添加引用,"Model Aware" 可能默认为 "False".
我能够通过导入项目("Model Aware" 设置已设置为 "True")重现此错误(和修复)并将其设置为 "False" 以获取错误并返回 "True" 以删除错误。
此外,如果由于某种原因您确实遇到了该错误并且 "proper" 设置似乎不起作用,即使在执行了 "Clean Solution"、"Rebuild Solution" 和即使关闭并重新启动 Visual Studio,则需要删除 $(ProjectDir)\project_name.dbmdl 文件。为了删除该文件,项目无法在 Visual Studio 中打开,因为它将被 Visual Studio 锁定。或者,您可以转到项目属性,然后在 "Project Settings" 选项卡上,将 "Target platform" 更改为另一个版本,然后再恢复为原来的状态(类似于其他答案中描述的内容,但有在将其翻转回原始版本之前无需执行 "build" 或 "rebuild"),因为这会产生删除 .dbmdl 文件的副作用。
请注意,.dbmdl 文件只有在项目关闭后才会被写入。因此,如果您第一次打开项目时该文件不存在,或者如果您切换 "Target platform",那么在您关闭之前您将看不到 .dbmdl 文件解决方案、卸载项目或退出 Visual Studio。执行 "Save All" 不会将此文件写入磁盘!
我也有这个问题,通过将 Visual Studio 中的 SQL 兼容性级别更改为 2012,重新编译项目,然后将其更改回 2008 的兼容性级别,然后执行一个干净的项目,然后重新编译。