Feil #: 490 (SQL-hurtigreparasjon)
Sammendrag
Når du prøver å oppgradere eller nedgradere en samling for et common language runtime (CLR)-objekt i en forekomst av Microsoft SQL Server 2005, kan du ikke endre versjonen av de refererte samlingene i metadataene for samlingen. Hvis du bruker en samling med sterkt navn for en CLR-objekt, kan du ikke kan nedgradere samlingen ved å bruke SAMLINGEN ALTER-setning.
INTRODUKSJON
Denne artikkelen beskriver hvordan du oppgraderer eller nedgradere en samling som har en referansesamling for en CLR-objekt i en forekomst av SQL Server 2005.
Hvis du vil ha mer informasjon
Hvordan du oppgraderer eller nedgradere en samling
Du kan bruke SAMLINGEN ALTER-setning i SQL Server 2005, oppgradere eller nedgradere en frittstående samling som ikke ble opprettet med et sterkt navn. Du kan oppgradere men kan ikke nedgradere samlingen ved å bruke SAMLINGEN ALTER-setning for en samling med sterkt navn.
Du kan ikke oppgradere eller nedgradere en samling i følgende situasjon:
-
Samling A opprettes for en CLR-objekt i en forekomst. Samlingen A har en referansesamling. Den refererte samlingen er samlingen B.
-
Samlingen B har ingen referansesamling.
-
Du kompilere samlingen en referanse til en annen versjon av samlingen B.
I dette scenariet kan du bruke SAMLINGEN ALTER-setning oppgradere samling B til en ny versjon. Hvis samlingen B ikke er en samling med sterkt navn, kan du også nedgradere samlingen B en gammel versjon. Du kan ikke bruke SAMLINGEN ALTER-setning, oppgradere eller nedgradere en samling til Rekompilerte versjon.
Dette problemet oppstår fordi SQL Server oppretter en CLR fusion policy når du oppretter samlingen A. Denne policyen for CLR-fusion tilordner automatisk versjonen av samlingen B i metadataene for samlingen A til den faktiske versjonen av samlingen B. SQL Server laster inn den nye versjonen av samlingen B ved kjøretid når du oppgraderer eller nedgradere samlingen B til noen andre versjonen. Dette skjer selv om samlingen A refererer til den opprinnelige versjonen av samlingen B. Men når du prøver å oppgradere eller nedgradere en samling når samlingen A inneholder en ny versjon av samlingen B i metadataene, endre samling-setningen vil mislykkes og du får feilmeldinger som ligner på følgende:
Feilmelding 1
Msg 6529, nivå 16 tilstand 1, linje 1
Endre SAMLINGEN mislyktes fordi identiteten til referansesamling 'RefAsm' er endret. Kontroller at versjonen, navnet og fellesnøkkelen ikke er endret.
Feilmelding 2
Msg 6282, nivå 16 tilstand 1, linje 1
Endre SAMLINGEN mislyktes fordi de refererte samlingene vil endre. Listen over refererte samlingen må være den samme.
Oppgradere eller nedgradere samlingen
Notater
-
Disse trinnene oppgradere eller nedgradere en samling i scenariet som er beskrevet i delen "Slik oppgraderer eller nedgradere en samling".
-
Dette eksemplet forutsetter at versjonene av de to samlingene er både 1.0.0.0 og samlingene begge er skrevet i C#. Når du følger denne fremgangsmåten, forsøker å oppgradere samling A og B-samlingen til versjon 2.0.0.0.
Bruk følgende fremgangsmåte for å oppgradere eller nedgradere en samling.
-
Sikkerhetskopiere versjon 1.0.0.0 av samlingen B til en mappe.
-
Endre, og deretter omkompilere samlingen B til versjon 2.0.0.0.
-
Bruk setningen endre SAMLINGEN oppgradere samling B i SQL Server 2005.
-
Endre, og deretter omkompilere samling A til versjon 2.0.0.0. Når du gjør dette, referanseversjon 1.0.0.0 av samlingen B fra sikkerhetskopien du opprettet i trinn 1. Hvis du vil gjøre dette, bruker du verktøyet Csc.exe kompilatoren sammen med /reference -bryteren. Hvis du for eksempel bruke følgende kommando:
CSC-/target:library/out:AssemblyAdll AssemblyA.cs AssemblyInfo.cs /reference: "BackupFolder\AssemblyBdll"Obs! Hvis du vil kontrollere hvilken versjon av samlingen B i metadataene for samlingen A, åpne samlingen A ved hjelp av verktøyet Ildasm.exe. Deretter Kontroller metadatainformasjon for referansesamling MANIFEST -delen.
-
Bruk endre SAMLINGEN-setningen til å oppgradere en samling i SQL Server 2005.
Hvordan å nedgradere en samling med sterkt navn
Hvis du bruker en samling med sterkt navn for en CLR-objekt, støtter ikke SQL Server 2005 ved hjelp av ALTER SAMLINGEN-setningen til å nedgradere samlinger. Hvis du prøver å nedgradere versjonen av en samling ved å bruke SAMLINGEN ALTER-setning, får du en feilmelding som ligner på følgende:
Msg 6579, nivå 16 tilstand 1, linje 1
Endre samling fra ' Asm1, versjon = 1.1.0.0, kultur = nøytral, publickeytoken = 3a52b896cff0513d, processorarchitecture = msil' til ' Asm1, versjon = 1.0.0.0, culture = nøytral, publickeytoken = 3a52b896cff0513d, processorarchitecture = msil' er ikke en kompatibel oppgradering.
Når du ønsker å nedgradere en samling med sterkt navn, følger du disse trinnene:
-
Fjern alle objekter som er avhengige av samlingen.
-
Slette den nyere versjonen av samlingen.
-
Opprette den eldre versjonen av samlingen.
-
Opprett alle nødvendige objekter som er avhengige av samlingen.
Obs! Du kan oppgradere en samling med sterkt navn ved hjelp av SAMLINGEN ALTER-setning. Hvis oppgraderingen omfatter en referansesamling, må du følge de samme trinnene som er oppført i delen "Oppgradering eller nedgradering en samling".
Referanser
Hvis du vil ha mer informasjon om SAMLINGEN ALTER-setning, kan du gå til følgende webområde for Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms186711.aspxHvis du vil ha mer informasjon om Ildasm.exe-verktøyet, kan du gå til følgende MSDN-webområde:
http://msdn2.microsoft.com/en-us/library/aa309387(VS.71).aspx