一部の SSIS スクリプト タスクで使用されている C# .NET 3.5 クラス ライブラリ (DLL) があるため、GAC にロードする必要があります。つまり、署名する必要があります。キーを作成して DLL に署名すると、SSIS で動作します。
次に、この DLL を SQL サーバーにロードし、この DLL 内のクラスのメソッドを参照するいくつかの CLR オブジェクトを作成します。VS2012 データベース プロジェクトがあり、DLL への参照を追加して、IsVisible および ModelAware プロパティを true に設定しました。UserDefinedFunctions クラスを拡張して、DLL 内の静的メソッドを呼び出す 2 つの関数を追加しました。
SAFE
データベース内のもの以外は何も必要ないため、データベース プロジェクト内の参照アセンブリと CLR オブジェクトの両方が に設定されています。
プロジェクトはビルドされますが、ローカル データベースに公開すると、次の奇妙なエラーで失敗します。
Creating [<<REFERENCED_DLL>>]...
Creating [<<CURRENT_DATABASE_CLR>>]...
(288,1): SQL72014: .Net SqlClient Data Provider:
Msg 6218, Level 16, State 2, Line 1
CREATE ASSEMBLY for assembly '<<CURRENT_DATABASE_CLR>>' failed
because assembly '<<CURRENT_DATABASE_CLR>>' failed verification.
Check if the referenced assemblies are up-to-date and trusted
(for external_access or unsafe) to execute in the database.
CLR Verifier error messages if any will follow this message
[ : UserDefinedFunctions::sf_Function1][mdToken=0x6000001][offset 0x00000005]
Unable to resolve token.
[ : UserDefinedFunctions::sf_Function2][mdToken=0x6000002][offset 0x00000005]
Unable to resolve token.
クレイジーなのは、<<REFERENCED_DLL>>
アセンブリをビルドして署名しないと、プロジェクトが正常に発行され、機能が期待どおりに機能することです。データベース プロジェクトに署名しAllowPartiallyTrustedCallers
て、参照されている DLL に追加しようとしました。
GAC と SQL サーバーの両方で使用できる、この DLL の 1 つのバージョンだけが必要です。これどうやってするの?