2016-12-09 10 views
5

Мы используем инструменты SSDT с Visual Studio 2015 и Target Platform, установленными для SQL Server 2008. Мы застряли в этой функции, которая вызывает ошибку и нуждается в помощи в том, что мы можем сделать, чтобы исправить ее ,SQL 71501 имеет нерешенную ссылку на сборку

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

В папке Агрегаты для AddressFormatting.dll, я установить BuildAction построить, а затем в списке литературы я сумел увидеть модель Aware свойство, которое я теперь установлено значение True, , После того, как это сейчас я получаю следующее сообщение об ошибке:

SQL46010: Неправильный синтаксис около enter image description here

файл, в котором он указывает на ошибку в AddressFormatting.dll

+0

Любое сообщение об ошибке? Сначала вы развертывали * сборку? –

+0

SSDT создает соответствующие сценарии для развертывания сборки и функции. Как вы развернули свой код? –

+0

Что вы имеете в виду? мы просто импортировали проект из существующей базы данных, и эта функция была как есть. Он создал сборку в папке сборок. Я импортировал эту сборку в качестве ссылки в моем проекте, но ошибка все тот же. – Baahubali

ответ

3

У меня также была эта проблема, и она была загадкой решена путем изменения уровня совместимости SQL в Visual Studio до 2012 года, перекомпиляции проекта и последующего изменения его до уровня совместимости 2008 года, а затем выполнения чистого проекта и последующей перекомпиляции.

+0

Эй, там. Отличная информация, хотя и очень запутанная. Я не буду утверждать, что это сработало, так как вы видели, что это так, OP принял это, но я не могу воспроизвести это, и действия, предпринятые, по крайней мере, на поверхностном уровне, не должны были делать ничего, кроме перезаписывания SQL-сценарий развертывания, который не должен был приводить к этой ошибке. «Целевая платформа» изменяет только SQL, сгенерированный для сценария развертывания, а не что-то общее с самой DLL. Если возможно, я хотел бы получить фактическую причину, если вы не возражаете :-). Можете ли вы воспроизвести это, или это была единая вещь? –

+0

@srutzky: Я попытаюсь воспроизвести его и вернуться к вам, если смогу. просто для информации, я сделал все шаги, о которых вы упомянули, и это может быть комбинация вещей, которые исправили эту проблему. Я попытаюсь воспроизвести его, а затем дам вам точные шаги, если смогу. спасибо за вашу помощь. – Baahubali

+0

@ user1490835 и user3468420: Я понял.Изменение «Целевой платформы» до 2012 года, а затем и до 2008 года (и восстановление в 2012 году не требуется), но только из-за того, что происходит с изменением целевой платформы: оно удаляет ** $ ProjectDir \ project_name.dbmdl * * файл! Это можно сделать вручную, когда проект не загружается в Visual Studio. –

1

Эта проблема полностью в SSDT и не имеет ничего общего с Схемы или загрузка Ассембли в ПКК (оба из которых упоминаются в комментариях к вопросу). По какой-то причине, даже несмотря на то, что вы принесли сборку из SQL Server в свой проект, SSDT этого не видит. Вы упомянули в комментарии к вопросу о том, что вы «импортировали эту сборку в качестве ссылки в моем проекте», но это, вероятно, должно происходить автоматически, как это происходит в моем тестировании.

Вам необходимо перейти в папку «Ссылки» в «Обозревателе решений» и изменить свойство «Aware» на «True» для сборки (этот шаг разрешил ту же ошибку в этом вопросе S.O.: How to resolve VS2013 Error SQL71501: Procedure X has an unresolved reference to Assembly Y?). Если вы добавите ссылку вручную, «Модель Aware», вероятно, по умолчанию «False».

Я смог воспроизвести эту ошибку (и исправление), импортировав проект (настройка «Модель Aware» уже была установлена ​​на «Истина») и установила ее «False», чтобы получить ошибку и вернуться к «True msgstr "удалить ошибку.


Кроме того, если по какой-либо причине вы застрять с этой ошибкой и «правильная» настройка, кажется, не работает, даже после выполнения «Очистить решение», «Rebuild Solution», и даже закрытие вниз и перезапустить Visual Studio, вам необходимо удалить файл $ (ProjectDir) \ project_name.dbmdl. Чтобы удалить этот файл, проект не может быть открыт в Visual Studio, поскольку он будет заблокирован Visual Studio. Или вы можете перейти в «Свойства проекта», а на вкладке «Настройки проекта» изменить «Целевую платформу» на другую версию, а затем вернуться к тому, что было (похоже на то, что описано в другом ответе, но нет необходимости сделать «сборку» или «перестроить», прежде чем перевернуть ее обратно в исходную версию), так как это имеет побочный эффект удаления этого файла .dbmdl.

Обращаем ваше внимание, что файл .dbmdl не записан, пока проект не будет закрыт. Таким образом, если файл не существовал при первом открытии проекта или при переключении «Целевой платформы», вы не увидите файл .dbmdl, пока вы не закроете решение, не выгрузите проект или не выйдете из него Visual Studio. Выполнение «Сохранить все» не записывает этот файл на диск!

+0

Элемент уже добавлен как существующий элемент под папкой с именами сборок, которая была автоматически создана. Второй вариант Model Aware, я не могу найти свойство Model Aware и сделал это конкретное сообщение, прежде чем задавать вопрос. В свойствах Ассамблеи все, что я вижу, это «Build Action», «Copy to Output directory», «File Name» и «Full Path». Я использую VS 2015 с совместимостью с SQL 2008 и не уверен, что это связано с тем, почему это свойство теперь отображается? – Baahubali

+0

@ user1490835 Жаль, что я не смог добраться до этого в выходные дни. Я вижу ваше обновление и что опция «Model Aware» находится в области «Ссылки», а не в папке «Ассемблемы». Я просто сделал импорт и вижу то же самое. Я также вижу, что кто-то ответил и, похоже, сработал для вас. Это здорово, но у меня есть некоторые опасения относительно фактической причины, так как параметр «Target Platform» управляет только сгенерированным сценарием развертывания, и ничего больше. У меня есть представление о том, какова была настоящая проблема, но я не могу воспроизвести ее сам. Это что-то, что вы можете воспроизвести? –

+0

Я создал новый solutuin с проектом sql с нуля, и у него нет никаких проблем. все построено отлично, но свойство, поддерживающее модель, автоматически было установлено в true, что опять странно. я не уверен, что я должен попытаться воспроизвести эту ошибку .... Я дал вам щедрость, потому что это могли быть ваши шаги, которые разрешили проблему? может потребоваться только перезапустить визуальную студию или что-то в этом роде? – Baahubali