बस उत्सुक है, एक स्ट्रक्चर/वैल्यू प्रकार के आकार को सी # में ब्रेकिंग चेंज बदल रहा है? स्ट्रिंग्स मेमोरी लेआउट के मामले में अधिक संवेदनशील होते हैं क्योंकि उन्हें बदलने से सीधे सरणी/अन्य structs के आकार को प्रभावित होता है। क्या लाइब्रेरी में एक स्ट्रक्चर के लेआउट के बाद, बाइनरी-वार या सोर्स-वार तोड़ने वाले कोड का कोई उदाहरण बदल गया है?संरचना के आकार को सी # में एक ब्रेकिंग चेंज बदल रहा है?
नोट: "ब्रेक" से मेरा मतलब है कि यह सभी को संकलित करने में विफल रहता है या आईएल अवैध है। तो उदाहरण के लिए मैं इसे एक ब्रेकिंग चेंज नहीं मानूंगा:
// My.Library v1
public struct MyStruct {}
// My.Library v2
public struct MyStruct { int _field; }
// App code
using My.Library;
using System.Runtime.InteropServices;
Console.WriteLine(Marshal.SizeOf<MyStruct>()); // before printed 1, now prints 4
क्योंकि यह अभी भी चलता है।
क्या आप अप्रबंधित कोड से बातचीत करने के लिए इंटरऑप सर्विसेज का उपयोग कर रहे हैं? यदि ऐसा है तो जवाब हाँ है, यह एक तोड़ने वाला परिवर्तन है। यदि नहीं, तो जवाब अधिक nuanced है। –
क्षमा करें, मुझे आपके प्रश्न को समझ में नहीं आया ... आपने असेंबली को फिर से सम्मिलित किया, तो सब कुछ ठीक होना चाहिए? –
जिटर बहुत सारे पाप छुपाता है। संरचना आकार बिल्ड समय, केवल रनटाइम पर कोई भूमिका नहीं निभाते हैं। एक अनिश्चित क्षेत्र होने के कारण आश्चर्यजनक हो सकता है। –