2016-12-02 29 views
5

से उत्पन्न दो डीएलएल फ़ाइल में ये अंतर क्या हैं मेरे सभी कोड स्रोत नियंत्रण में हैं, इसलिए मुझे 100% यकीन है कि स्रोत कोड नहीं बदला है। लेकिन अगर मैं एक सी # डीएलएल दो बार बनाता हूं तो उनकी सामग्री थोड़ा अलग होती है। मैं बस निर्माण करके 100% समय की समस्या का पुनरुत्पादन कर सकता हूं, और फिर फिर से निर्माण कर सकता हूं।एक ही स्रोत कोड

यह प्रोग्राम को बिल्कुल प्रभावित नहीं करता है, लेकिन एमएसआईएमएसपी जैसे टूल्स, दो एमएसआई फाइलों से पैच बनाने के लिए उपयोग किए जाते हैं, इन मिनटों में बदलाव से फेंक दिया जाता है। पैच बनाना (मेरे उत्पाद के लिए) 40x बड़ा होना चाहिए।

मैंने डीएलएल और उनकी असेंबली सूचना, कक्षाएं, आदि दोनों को संकुचित कर दिया है ... बिल्कुल वही हैं। फाइलें बिल्कुल वही आकार हैं, लेकिन निश्चित रूप से एक अलग निर्माण समय है। तो मैं वास्तव में क्या बदल गया है समझ में नहीं आता है।

तो मैंने थोड़ा गहरा खोला।

मैंने परिवर्तन खोजने के लिए WinDiff का उपयोग किया है और फिर हेक्स संपादक में इन्हें संदर्भित किया है। WinDiff दूसरी 'लाइन' में बदलाव और फ़ाइल के लगभग 80% पर एक पंक्ति में दिखाता है।

हेक्स संपादक में मैं देखता हूं कि बदला गया पहला बाइट बाइट 0x088 (बाइट 136) है। ऐसा लगता है कि इस 'लाइन' पर एकमात्र बाइट बदल गया है। मुझे दूसरा बदलाव खोजने में परेशानी है क्योंकि WinDiff मुझे परिवर्तन के सटीक बाइट ऑफ़सेट नहीं बताता है।

यहां परिवर्तनों की एक छवि है, सही फ़ाइल नई फ़ाइल की सामग्री है। Hex view

क्या कोई भी (सी #) डीएलएल फाइलों के मेकअप से परिचित कोई जानता है कि बदले बाइट का मतलब क्या हो सकता है? या फिर बेहतर है कि यह सुनिश्चित करने के लिए कि जब आप उन्हें पुनर्निर्माण करते हैं तो डीएलएल फाइलें वही रहती हैं?

+0

कभी-कभी मेरे बिन/रिलीज फ़ोल्डर में $ RANDOM_SEED $ नाम की एक फ़ाइल होती है, और जब भी मैं पुनर्निर्माण करता हूं उस फ़ाइल की सामग्री बदल जाती है। मैं विस्तार से नहीं गया हूं, लेकिन मैं कल्पना कर सकता हूं कि दो परिवर्तनों में से एक है। किसी को कुछ पुनर्विक्रय करने की आवश्यकता होगी। ** संपादित करें: ** (इसकी नुनिट, शायद डीएल में कोई प्रभाव नहीं है, इसलिए मेरी टिप्पणी भूल जाओ) http://stackoverflow.com/a/40382757/5962841 – Mafii

+0

एक अच्छा टेक्स्ट/वेदिट जैसे हेक्स संपादक। मैं 1 9 8 9 से इसका उपयोग कर रहा हूं। इन आईडीई और इंटेलिजेंस दिनों में भी आपके निपटारे में एक अच्छा उपकरण है। www.vedit.com –

+3

[मैं कैसे बता सकता हूं कि दो नेट डीएलएल समान हैं] (http://stackoverflow.com/questions/2735643/how-can-i-tell-whether-two-net-dlls-are- वही) एक अलग कोण से एक ही मुद्दे से संपर्क करने लगता है। –

उत्तर

4

यह एक पुनर्निर्माण

Difference between Build Solution, Rebuild Solution, and Clean Solution in Visual Studio?

अगर यह यह एक परियोजना के पुनर्निर्माण की जरूरत नहीं लगता है बिल्ड और के बीच मतभेद के साथ कुछ हो सकता है, ऐसा नहीं होगा। यह भी परियोजना के आंशिक रूप से निर्मित बिट्स अगर वे

प्रदर्शन निर्माण दृश्यों और इस तरह के पीछे मेटाडाटा का उपयोग करता है नहीं बदला है का उपयोग कर सकते

Why is a different dll produced after a clean build, with no code changes?

समाधान अपने dll के अलग हो सकता है :

आप के रूप में एक नियतात्मक निर्माण प्रदर्शन करने के लिए की आवश्यकता होगी वर्णित here

+0

हाँ लेकिन कई बार निर्माण करना हर बार सटीक उसी बाइनरी का उत्पादन करना चाहिए, नहीं? – Mafii

+1

@ माफि दुर्भाग्यवश दृश्यों के पीछे हमेशा कुछ चल रहा है ... मेटाडाटा ऐसा लगता है जैसे http://stackoverflow.com/questions/107196/why-is-a- अलग-dll-produced-after-a-clean- बिल्ड-इन-नो-कोड-चेंज्स ताकि नहीं, वे पैच बनाने के लिए उन मेटाडेटा बाइट्स को अनदेखा करने के लिए किसी भी तरह की द्विआधारी – Fuzzybear

+0

@Fuzzybear का उत्पादन नहीं करेंगे? (शायद मुझे इसे एक अलग प्रश्न के रूप में पूछना चाहिए) –

संबंधित मुद्दे