Bug #: 490 (SQL 修正プログラム)
概要
アップグレードまたは Microsoft SQL Server 2005 のインスタンスで共通言語ランタイム (CLR) オブジェクトのアセンブリをダウン グレードしようとすると、アセンブリのメタデータ内で参照されるアセンブリのバージョンは変更できません。また、CLR オブジェクトに対する厳密な名前のアセンブリを使用する場合、ALTER ASSEMBLY ステートメントを使用してアセンブリをダウン グレードできません。。
はじめに
この資料では、アップグレードまたは SQL Server 2005 のインスタンスで CLR オブジェクトの参照先アセンブリを持つアセンブリをダウン グレードする方法について説明します。
詳細
アップグレードまたはアセンブリをダウン グレードする方法
SQL Server 2005 では、アップグレードまたは厳密な名前で作成されていないスタンドアロン アセンブリをダウン グレードするのには、ALTER ASSEMBLY ステートメントを使用できます。厳密な名前付きアセンブリでは、アップグレードできますが、ALTER ASSEMBLY ステートメントを使用してアセンブリをダウン グレードできません。。
アップグレードするか、次のシナリオでは、アセンブリをダウン グレードできません。
-
アセンブリ A では、インスタンスで CLR オブジェクトが作成されます。アセンブリ A には、参照先アセンブリがあります。参照アセンブリは、アセンブリ B. です。
-
アセンブリ B には、参照先アセンブリがありません。
-
アセンブリ B. の異なるバージョンを参照するアセンブリ A が再コンパイルします。
このシナリオでは、アセンブリ B の新しいバージョンにアップグレードするのには、ALTER ASSEMBLY ステートメントを使用できます。アセンブリ B は、厳密な名前付きアセンブリではない場合も古いバージョンのアセンブリ B をダウン グレードすることができます。ただし、アップグレードするか、再コンパイルされたバージョンのアセンブリ A をダウン グレードするのには、ALTER ASSEMBLY ステートメントを使用できません。
アセンブリ A を作成するとき、SQL Server が CLR フュージョン ポリシーを作成するためにこの現象が発生します。この CLR フュージョン ポリシーは、アセンブリ B. SQL Server の実際のバージョン A にアップグレードまたは他のいくつかのバージョンのアセンブリ B をダウン グレードすると、実行時にアセンブリ B の新しいバージョンが読み込まれるアセンブリのメタデータにアセンブリ B のバージョンを自動的にマップします。アセンブリ A がアセンブリ B. の元のバージョンを指す場合でもこの現象が発生します。ただし、しようとするとアップグレードするか、アセンブリ A には、メタデータにアセンブリ B の新しいバージョンが含まれています、ALTER ASSEMBLY ステートメントが失敗し、次のようなエラー メッセージが表示される場合は、アセンブリ A をダウン グレードします。
エラー メッセージ 1
メッセージ 6529、レベル 16、状態 1、行 1
アセンブリの変更は、参照されたアセンブリ 'RefAsm' の id が変更されたために失敗しました。バージョン、名前、および公開キーが変更されていないことを確認します。
エラー メッセージ 2
メッセージ 6282、レベル 16、状態 1、行 1
アセンブリの変更は、参照アセンブリを変更するために失敗しました。参照されるアセンブリは同じままする必要があります。
アップグレードまたはアセンブリをダウン グレード
注:
-
次の手順は、アップグレードまたは「アップグレードまたはアセンブリをダウン グレードする方法」セクションで説明されているシナリオでは、アセンブリ A をダウン グレードします。
-
この例では、2 つのアセンブリのバージョンが 1.0.0.0 とアセンブリの両方がある両方は C# で記述します。これらの手順を実行した場合は、アセンブリ A およびアセンブリ B のバージョン 2.0.0.0 をアップグレードするのにはください。
アップグレードするか、アセンブリ A をダウン グレードするには、以下の手順をします。
-
フォルダーには、アセンブリ B のバージョン 1.0.0.0 をバックアップします。
-
変更し、バージョン 2.0.0.0 のアセンブリ B を再コンパイルします。
-
SQL Server 2005 では、アセンブリ B にアップグレードするのにには、ALTER ASSEMBLY ステートメントを使用します。
-
変更し、バージョン 2.0.0.0 のアセンブリ A を再コンパイルします。こうと、手順 1 で作成したバックアップから、アセンブリ B のバージョン 1.0.0.0 を参照します。これを行うには、 /referenceスイッチ Csc.exe コンパイラ ツールを使用します。たとえば、次のコマンドを使用します。
csc/target:library/out:アセンブリの .dllアセンブリ.cs AssemblyInfo.cs/reference:"BackupFolder\AssemblyB.dll」
-
アセンブリ A のメタデータにアセンブリ B のバージョンを確認するには、Ildasm.exe ユーティリティを使用してアセンブリ A を開きます。次に、マニフェストのセクションの下にある参照先アセンブリのメタデータ情報を確認します。
-
SQL Server 2005 でアセンブリ A をアップグレードするのには、ALTER ASSEMBLY ステートメントを使用します。