2016-12-09 27 views
5

Visual Studio 2015でターゲットプラットフォームをSQL Server 2008に設定しているSSDTツールを使用していますが、この機能ではエラーが発生しており、修正するための支援が必要です。アセンブリフォルダの下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のために、私は、ビルドするビルドアクションを設定し、参照の下で私は今Trueに設定されているモデルAwareのプロパティを参照するために管理。この後、今、私は次のエラーを取得する:

SQL46010:enter image description here

近くに不正な構文がエラーを指していたファイルがAddressFormatting.dll

+0

メッセージが間違っていますか?最初に* assembly *をデプロイしましたか? –

+0

SSDTは、アセンブリと関数を展開するための適切なスクリプトを作成します。コードをどのように展開しましたか? –

+0

どういう意味ですか?既存のデータベースからプロジェクトをインポートしましたが、この機能はそのままです。アセンブリフォルダの下にアセンブリが作成されました。私はプロジェクトで参照としてそのアセンブリをインポートしましたが、エラーは同じです。 – Baahubali

答えて

3

また、Visual StudioのSQL互換レベルを2012に変更し、プロジェクトを再コンパイルしてから、互換性レベルを2008に変更してクリーンなプロジェクトを作成して再コンパイルすることで、不思議な問題が解決されました。

+0

ねえ。素晴らしい情報ですが、非常に混乱します。私はあなたがそれを見たので働いたと主張するつもりはないが、OPはそれを受け入れたが、私はこれを再現することはできず、少なくとも表面的なレベルで取られた行動は、そのエラーにつながってはならない展開SQLスクリプトです。 「ターゲットプラットフォーム」は、展開スクリプト用に生成されたSQLのみを変更し、DLL自体とは関係ありません。可能であれば、あなたが気にしないなら、私は実際の原因に行きたいです:-)。あなたはこれを再現できますか、それは一度限りのものでしたか? –

+0

@srutzky:私はそれを再現しようとし、できれば戻ってきます。ちょうど情報のために、私もあなたが言及したすべての手順を実行したし、この問題を修正したものの組み合わせかもしれません。私はそれを複製し、私ができるならばあなたに正確なステップを与えることを試みます。あなたのすべての助けをありがとう。 – Baahubali

+0

@ user1490835とuser3468420:私はそれを理解しました。"ターゲットプラットフォーム"を2012年に変更してから2008年に変更する(2012年に設定している間は再ビルドする必要はありません)。ただし、ターゲットプラットフォームを変更するだけで、** $ ProjectDir \ project_name.dbmdl * *ファイル!これは、プロジェクトが現在Visual Studioに読み込まれていないときに手動で行うことができます。 –

1

で、この問題は完全にSSDT内にあり、とは何の関係もありませんGACにスキーマをロードしたりアセンブリをロードしたりすることができます(どちらも質問のコメントに記載されています)。何らかの理由で、アセンブリをSQL Serverからプロジェクトに持ってきても、SSDTはそれを見ていません。あなたは "あなたのプロジェクトで参照としてアセンブリをインポートしました"という質問にコメントしていますが、それはおそらく私のテストと同じように自動的に起こったはずです。

"ソリューションエクスプローラ"の "References"フォルダに移動し、アセンブリの "Model Aware"プロパティを "True"に変更する必要があります(このステップでは、このS.O.質問の同じエラーが解決されました:How to resolve VS2013 Error SQL71501: Procedure X has an unresolved reference to Assembly Y?)。参照を手動で追加すると、 "モデル認識"はおそらくデフォルトで "False"になります。

プロジェクトをインポートすることでこのエラー(および修正)を再現できました(モデルアウェア設定は既に「True」に設定されています)。エラーを取得して「True」に戻すために「False」に設定しました。エラーを削除します。

また

、何らかの理由でそのエラーにはまりんし、「適切な」設定が動作していないようです、でも「ソリューションのクリーン」を実行した後、「ソリューションのリビルド」、とさえ閉じた場合Visual Studioを再起動してから、$(ProjectDir)\ p​​roject_name.dbmdlファイルを削除する必要があります。そのファイルを削除するには、プロジェクトをVisual Studioで開くことができません。プロジェクトはVisual Studioによってロックされるためです。または、[プロジェクトのプロパティ]に移動し、[プロジェクト設定]タブで[ターゲットプラットフォーム]を別のバージョンに変更して元のものに戻すことができます(他の回答に記載されているのと同様ですが、元のバージョンに戻す前に「ビルド」または「再ビルド」を実行する)ことができます。これは、.dbmdlファイルを削除するという副作用があります。

プロジェクトが終了するまで、.dbmdlファイルは書き込まれませんのでご注意ください。したがって、最初にプロジェクトを開いたときにファイルが存在しなかった場合、または「ターゲットプラットフォーム」を切り替えた場合は、ソリューションを閉じたり、プロジェクトをアンロードしたり、終了したりするまで、ファイル.dbmdlは表示されません。 Visual Studio。 「すべて保存」を実行しても、このファイルはディスクに書き込まれません。

+0

このアイテムは、自動的に作成されたアセンブリと呼ばれるフォルダの下に既存のアイテムとして既に追加されています。 Model Awareの2番目の選択肢は、モデルアウェアのプロパティを見つけることができないと思うし、質問をする前にその特定の投稿をしました。アセンブリのプロパティで、私は "ビルドアクション"、 "出力ディレクトリにコピー"、 "ファイル名"と "フルパス"が表示されます。私はVS 2015とSQL 2008の互換性を使用していますが、このプロパティが現在表示されている理由と関係があるかどうかはわかりません。 – Baahubali

+0

@ user1490835申し訳ありませんが、週末にこれにアクセスできませんでした。私はあなたのアップデートを見て、 "Model Aware"オプションは "Assemblies"フォルダではなく "References"エリアにあります。私はちょうど輸入して、同じことを見ている。私はまた、他の誰かが答えて、それがあなたのために働いたように見えることがわかります。それは素晴らしいですが、 "Target Platform"設定では生成されたデプロイメントスクリプトのみが制御されるため、実際の原因については心配しています。私は実際の問題が何であるかを知っていますが、それを自分で再現することはできません。あなたが再現できるものですか? –

+0

私は最初からsqlプロジェクトを使用して新しいsolutuinを作成しましたが、全く問題はありません。すべての正常に構築されたモデルのプロパティは自動的にtrueに設定されましたが、これはもう奇妙です。私はそのエラーを再現しようとするべきかどうかわかりません....問題を解決したあなたの措置があるかもしれないので、私はあなたに恩恵を与えましたか?ビジュアルスタジオなどを再起動する必要がありますか? – Baahubali

関連する問題