Hoe u een upgrade of een downgrade uit een assembly die een assembly waarnaar wordt verwezen voor een CLR-object in een exemplaar van SQL Server 2005 is


BUG #: 490 (SQL-Hotfix)

Samenvatting


Wanneer u een upgrade of een downgrade uit een assembly voor een common language runtime (CLR)-object in een exemplaar van Microsoft SQL Server 2005, kunt u de versie van de assembly waarnaar wordt verwezen in de metagegevens van de algemene vergadering niet wijzigen. Ook als u een assembly met een sterke naam voor een CLR-object gebruikt, kunt niet u downgraden de assembly met de instructie ALTER ASSEMBLY.

INLEIDING


Dit artikel wordt beschreven hoe u een upgrade of een downgrade uit een assembly die een assembly waarnaar wordt verwezen voor een CLR-object in een exemplaar van SQL Server 2005 is.

Meer informatie


Hoe u een upgrade of een downgrade uit een assembly

In SQL Server 2005 kunt u de instructie ALTER ASSEMBLY upgraden of downgraden van een zelfstandige assembly die niet is gemaakt met een sterke naam. Voor een assembly met sterke naam kunt upgraden maar de assembly met de instructie ALTER ASSEMBLY kunt niet downgraden.

U kunt upgrade of downgrade een assembly in het volgende scenario:
  • Een assembly wordt voor een CLR-object in een exemplaar gemaakt. Een assembly is een assembly waarnaar wordt verwezen. De assembly waarnaar wordt verwezen is assemblage B.
  • B assembly heeft geen assembly waarnaar wordt verwezen.
  • Opnieuw compileren van assembly A Als u verwijst naar een andere versie van de assembly-B.
In dit scenario kunt u de instructie ALTER ASSEMBLY B assembly bijwerken naar een nieuwe versie. Als B-assembly een assembly met een sterke naam is, kunt u ook downgraden assembly B naar een oude versie. Echter niet de instructie ALTER ASSEMBLY gebruiken om te upgraden of downgraden van een assembly met de versie opnieuw.

Dit probleem treedt op omdat SQL Server een fusie CLR beleid maakt bij het maken van assembly A. Dit beleid CLR fusion wijst automatisch de versie van de assembly B in de metagegevens van A tot en met de werkelijke versie van assembly B. SQL Server wordt de nieuwe versie van B assembly tijdens het uitvoeren wanneer u een upgrade of downgrade assembly B naar een andere versie geladen assembly. Dit probleem treedt ook op wanneer een assembly naar de oorspronkelijke versie van de assembly B. verwijst Echter, wanneer u probeert om te upgraden of downgraden assembly A wanneer een assembly een nieuwe versie van de assembly B in de metagegevens bevat, de instructie ALTER ASSEMBLY mislukt en foutberichten die vergelijkbaar zijn met de volgende:
Foutbericht 1
Msg 6529, niveau-16 staat 1, regel 1

ALTER ASSEMBLY is mislukt omdat de identiteit van assembly 'RefAsm' is gewijzigd. Controleer of dat de versie, de naam en de openbare sleutel niet zijn gewijzigd.
Foutbericht 2
Msg 6282, niveau-16 staat 1, regel 1

ALTER ASSEMBLY is mislukt omdat de assembly waarnaar wordt verwezen. De lijst van de assembly waarnaar wordt verwezen moet hetzelfde blijven.

Een upgrade of een downgrade uit de assembly

Opmerkingen
  • Deze stappen upgrade of een downgrade uit een assembly in het scenario dat is beschreven in de sectie 'How to upgrade of een downgrade uit een assembly'.
  • In dit voorbeeld wordt ervan uitgegaan dat de versies van de twee verzamelingen zowel 1.0.0.0 en de assembly's zijn zowel geschreven in C#. Als u deze stappen hebt uitgevoerd, probeert u assembly A en B-assembly bijwerken naar versie 2.0.0.0.
Ga als volgt te werk om een upgrade of een downgrade uit een assembly.
  1. Back-up versie 1.0.0.0 van assembly B naar een map.
  2. Wijzigen en het vervolgens opnieuw compileren assembly B naar versie 2.0.0.0.
  3. Gebruik de instructie ALTER ASSEMBLY bijwerken B assembly in SQL Server 2005.
  4. Wijzigen en het vervolgens opnieuw compileren van een assemblage naar versie 2.0.0.0. Wanneer u dit doet, versie 1.0.0.0 van assembly B van de reservekopie die u in stap 1 hebt gemaakt. Gebruik hiervoor het hulpprogramma Csc.exe compiler samen met de schakeloptie/Reference . Gebruik bijvoorbeeld de volgende opdracht:
    csc /target:library/out:AssemblyAdll- AssemblyA:. cs/Reference AssemblyInfo.cs: 'BackupFolder\AssemblyB.dll "
    Opmerking Open om te controleren of de versie van de assembly B in de metagegevens van een samenstel, een assembly met het hulpprogramma Ildasm.exe. Controleer vervolgens of de metagegevens voor de assembly waarnaar wordt verwezen in de sectie MANIFEST .
  5. Gebruik de instructie ALTER ASSEMBLY bijwerken een assembly in SQL Server 2005.

Hoe downgrade een assembly met een sterke naam

Als u een assembly met een sterke naam voor een CLR-object, ondersteunt SQL Server 2005 geen gebruik van de instructie ALTER ASSEMBLY downgraden van assembly's. Als u de versie van een assembly met de instructie ALTER ASSEMBLY downgrade, wordt een foutbericht van de volgende strekking:
Msg 6579, niveau-16 staat 1, regel 1
ALTER assembly uit ' Asm1, versie = 1.1.0.0, cultuur = neutral, publickeytoken = 3a52b896cff0513d, processorarchitecture = msil' naar ' Asm1, versie 1.0.0.0, culture = neutral, publickeytoken = = 3a52b896cff0513d, processorarchitecture = msil' is niet een compatibele upgrade.
Als u een assembly met een sterke naam downgraden wilt, als volgt te werk:
  1. Alle objecten die afhankelijk van de algemene vergadering zijn worden weggehaald.
  2. De nieuwere versie van de algemene vergadering worden weggehaald.
  3. De oudere versie van de algemene vergadering maken.
  4. Alle vereiste objecten maken die afhankelijk van de algemene vergadering zijn.
Opmerking U kunt een assembly met een sterke naam upgraden met behulp van de instructie ALTER ASSEMBLY. Als de upgrade betrekking heeft op een assembly waarnaar wordt verwezen, moet u de stappen die worden vermeld in de sectie 'De Upgrade of downgrade een assembly' volgen.

Referenties


Ga naar de volgende website van Microsoft Developer Network (MSDN) voor meer informatie over de instructie ALTER ASSEMBLY:Ga naar de volgende MSDN-website voor meer informatie over het hulpprogramma voor Ildasm.exe: