จุดบกพร่อง #: 490 (โปรแกรมแก้ไขด่วนของ SQL)
สรุป
เมื่อคุณพยายามปรับรุ่น หรือปรับลดรุ่นแอสเซมบลีสำหรับวัตถุรันไทม์ (CLR) ภาษาทั่วไปในอินสแตนซ์ของ Microsoft SQL Server 2005 คุณไม่สามารถเปลี่ยนรุ่นของแอสเซมบลีที่อ้างอิงในข้อมูลเมตาของแอสเซมบลี นอกจากนี้ ถ้าคุณใช้แอสเซมบลีที่มีชื่อที่คาดเดายากสำหรับวัตถุ CLR คุณไม่สามารถปรับลดรุ่นแอสเซมบลี โดยใช้คำสั่ง ALTER แอสเซมบลี
บทนำ
บทความนี้อธิบายวิธีการปรับรุ่น หรือปรับลดรุ่นแอสเซมบลีที่มีแอสเซมบลีที่อ้างอิงสำหรับวัตถุ CLR ในอินสแตนซ์ของ SQL Server 2005
ข้อมูลเพิ่มเติม
วิธีการปรับรุ่น หรือปรับลดรุ่นแอสเซมบลี
ใน SQL Server 2005 คุณสามารถใช้คำสั่ง ALTER แอสเซมบลีการปรับรุ่น หรือปรับลดรุ่นแอสเซมบลีแบบสแตนด์อโลนที่ถูกสร้างขึ้น ด้วยชื่อที่คาดเดายาก สำหรับตัวอย่างแน่นหนาชื่อแอสเซมบลี คุณสามารถปรับรุ่น แต่ไม่สามารถปรับลดรุ่นแอสเซมบลี โดยใช้คำสั่ง ALTER แอสเซมบลี
คุณไม่สามารถปรับรุ่น หรือปรับลดรุ่นแอสเซมบลีในสถานการณ์จำลองต่อไปนี้:
-
แอสเซมบลี A ถูกสร้างขึ้นสำหรับวัตถุในอินสแตนซ์ CLR แอสเซมบลี A มีแอสเซมบลีที่อ้างอิง แอสเซมบลีที่อ้างอิงมีแอสเซมบลี B.
-
แอสเซมบลี B ได้ไม่มีแอสเซมบลีที่อ้างอิง
-
คุณคอมไพล์ใหม่แอสเซมบลี A ในการอ้างอิงแอสเซมบลี B. รุ่นอื่น
ในสถานการณ์สมมตินี้ คุณสามารถใช้คำสั่ง ALTER แอสเซมบลีเพื่ออัพเกรดแอสเซมบลี B เป็นเวอร์ชันใหม่ ถ้าแอสเซมบลี B ไม่ใช่แอสเซมบลีรัดกุมชื่อ คุณสามารถจะปรับลดรุ่นแอสเซมบลี B ไปเป็นรุ่นเก่า อย่างไรก็ตาม คุณไม่สามารถใช้คำสั่ง ALTER แอสเซมบลี การปรับรุ่น หรือปรับลดรุ่น A แอสเซมบลีเป็นรุ่น recompiled
ลักษณะการทำงานนี้เกิดขึ้นเนื่องจาก SQL Server สร้างนโยบาย CLR ฟิวชันเมื่อคุณสร้างแอสเซมบลีสำนักกฎหมาย a นโยบายนี้ฟิวชัน CLR แมปกับรุ่นของแอสเซมบลี B ในข้อมูลเมตาของแอสเซมบลี A ไปยังแอสเซมบลี B. SQL Server รุ่นที่แท้จริงโหลดแอสเซมบลี B ในเวลารันเมื่อคุณอัพเกรด หรือปรับลดรุ่นแอสเซมบลี B บางรุ่นรุ่นใหม่โดยอัตโนมัติ ลักษณะการทำงานนี้เกิดขึ้นแม้ว่า A ของแอสเซมบลีที่อ้างอิงถึงแอสเซมบลี B. รุ่นแรก อย่างไรก็ตาม เมื่อคุณพยายามปรับรุ่น หรือปรับลดรุ่นของแอสเซมบลี A เมื่อ A แอสเซมบลีที่ประกอบด้วยเวอร์ชันใหม่ของแอสเซมบลี B ในข้อมูลเมตา คำสั่งเปลี่ยนแอสเซมบลีจะล้มเหลว และคุณได้รับข้อความแสดงข้อผิดพลาดที่คล้ายกับต่อไปนี้:
ข้อความแสดงข้อผิดพลาด 1
6529 ระดับ 16 ข่าวสารเกี่ยวกับสถานะ 1 บรรทัด 1
เปลี่ยนแอสเซมบลีล้มเหลวเนื่องจากมีการเปลี่ยนแปลงข้อมูลเฉพาะตัวของแอสเซมบลีที่อ้างอิง 'RefAsm' ตรวจสอบให้แน่ใจว่า ได้เปลี่ยนเวอร์ชัน ชื่อ และคีย์สาธารณะ
ข้อความแสดงข้อผิดพลาด 2
6282 ระดับ 16 ข่าวสารเกี่ยวกับสถานะ 1 บรรทัด 1
เปลี่ยนแอสเซมบลีล้มเหลวเนื่องจากแอสเซมบลีที่อ้างอิงจะเปลี่ยนแปลง รายการแอสเซมบลีที่อ้างอิงต้องเหมือนเดิม
ปรับรุ่น หรือปรับลดรุ่นแอสเซมบลี
หมายเหตุ
-
ขั้นตอนเหล่านี้ปรับรุ่น หรือปรับลดรุ่น A แอสเซมบลีในสถานการณ์ที่อธิบายไว้ในส่วน "วิธีการปรับรุ่น หรือปรับลดรุ่นแอสเซมบลี"
-
ตัวอย่างนี้สมมติว่า รุ่นของแอสเซมบลีที่สองเป็นทั้ง 1.0.0.0 ถึงแอสเซมบลีของทั้งสองอย่างจะถูกเขียนใน C# เมื่อคุณทำตามขั้นตอนเหล่านี้ คุณพยายามปรับรุ่นแอสเซมบลี A และ B ของแอสเซมบลีรุ่น 2.0.0.0
เมื่อต้องการปรับรุ่น หรือปรับลดรุ่นแอสเซมบลี A ให้ทำตามขั้นตอนเหล่านี้
-
สำรองรุ่น 1.0.0.0 แอสเซมบลี B ไปยังโฟลเดอร์
-
ปรับเปลี่ยน และแอสเซมบลี B รุ่น 2.0.0.0 ที่คอมไพล์ใหม่แล้ว
-
ใช้คำสั่ง ALTER แอสเซมบลีเพื่ออัพเกรดแอสเซมบลี B ใน SQL Server 2005
-
ปรับเปลี่ยน และแอสเซมบลี A รุ่น 2.0.0.0 ที่คอมไพล์ใหม่แล้ว เมื่อคุณทำเช่นนี้ อ้างอิงรุ่น 1.0.0.0 B แอสเซมบลีจากสำเนาสำรองที่คุณทำไว้ในขั้นตอนที่ 1 เมื่อต้องการทำเช่นนี้ ใช้เครื่องมือของคอมไพเลอร์ Csc.exe ร่วมกับสวิตช์/reference ตัวอย่างเช่น ใช้คำสั่งต่อไปนี้:
csc /target:library/ออก: .cs AssemblyA.dll ของAssemblyAAssemblyInfo.cs /reference: "BackupFolder\AssemblyB.dll"หมายเหตุ เมื่อต้องการตรวจสอบรุ่นของแอสเซมบลี B ในข้อมูลเมตาของแอสเซมบลี A เปิด A แอสเซมบลี โดยใช้โปรแกรมอรรถประโยชน์ Ildasm.exe นี้ แล้ว ตรวจสอบข้อมูลเมตาสำหรับแอสเซมบลีที่อ้างอิงภายใต้ส่วนของรายการ
-
ใช้คำสั่ง ALTER แอสเซมบลีเพื่ออัพเกรด A แอสเซมบลีใน SQL Server 2005
วิธีการปรับลดรุ่นแอสเซมบลีที่มีชื่อที่คาดเดายาก
ถ้าคุณใช้แอสเซมบลีที่มีชื่อที่คาดเดายากสำหรับวัตถุ CLR, SQL Server 2005 ไม่สนับสนุนโดยใช้คำสั่ง ALTER แอสเซมบลีเพื่อปรับลดรุ่นแอสเซมบลี ถ้าคุณพยายามที่จะปรับลดรุ่นรุ่นของแอสเซมบลี โดยใช้คำสั่ง ALTER แอสเซมบลี คุณได้รับข้อความแสดงข้อผิดพลาดที่คล้ายกับต่อไปนี้:
6579 ระดับ 16 ข่าวสารเกี่ยวกับสถานะ 1 บรรทัด 1
เปลี่ยนแอสเซมบลีจาก ' Asm1 รุ่น = 1.1.0.0 วัฒนธรรมกลาง publickeytoken = = 3a52b896cff0513d, processorarchitecture = msil' เพื่อ ' Asm1 รุ่น = 1.0.0.0 วัฒนธรรมกลาง publickeytoken = = 3a52b896cff0513d, processorarchitecture = msil' จะไม่ปรับปรุงความเข้ากัน
เมื่อคุณต้องการปรับลดรุ่นแอสเซมบลีที่มีชื่อที่คาดเดายาก ให้ทำตามขั้นตอนเหล่านี้:
-
ปล่อยวัตถุทั้งหมดที่ขึ้นอยู่กับแอสเซมบลี
-
ปล่อยรุ่นที่ใหม่กว่าของแอสเซมบลี
-
สร้างรุ่นเก่าของแอสเซมบลี
-
สร้างวัตถุที่จำเป็นทั้งหมดที่ขึ้นอยู่กับแอสเซมบลี
หมายเหตุ คุณสามารถปรับรุ่นแอสเซมบลีที่มีชื่อที่คาดเดายาก ด้วยการใช้คำสั่ง ALTER แอสเซมบลี อย่างไรก็ตาม ถ้าการอัพเกรดเกี่ยวข้องกับแอสเซมบลีที่อ้างอิง คุณต้องทำตามขั้นตอนเดียวกับที่แสดงไว้ในส่วน "การปรับรุ่นหรือการลดระดับการประกอบการผลิต"
ข้อมูลอ้างอิง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง ALTER แอสเซมบลี แวะไปเว็บไซต์ Microsoft Developer Network (MSDN) ต่อไปนี้:
http://msdn2.microsoft.com/en-us/library/ms186711.aspxสำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมอรรถประโยชน์นี้ Ildasm.exe แวะไปเว็บไซต์ต่อไปนี้:
http://msdn2.microsoft.com/en-us/library/aa309387(VS.71).aspx