2011-06-02 10 views
13

ayarlama:Aynı kaynak kodundan oluşturulan iki .NET yürütülebilir dosyasının sökülmesindeki farklılıklar nelerdir?

  • aynı kaynak kodu, iki farklı makineler üzerinde .NET 4 yürütülebilir (konsol uygulaması) oluşturmak için kullanılır.
  • Microsoft Visual Studio 2010 SP1 .NET 4 ayarları, her iki makineden de gerçekleştirilir:
  • ildasm projectName.exe /out:test.txt.
  • ildasm çıkışı, beklenen farklılıkların (mvid, privateimplementationdetails) ötesindedir.

Soru: Bir .NET yürütülebilir CRC almak için bir uygulama oluşturma biraz zaman geçirdim ve hepsi farklı yapı zamanlı verileri göz ardı başardılar
.

ben ildasm.exe çıktıda // =============== CLASS MEMBERS DECLARATION =================== çizgisinin üzerinde tüm verileri kaldırarak ediyorum. Bu MVID yok sayar. Ben hata ayıklama bilgisi olmadan .exe yapıyorum. Ve son olarak, <PrivateImplementationDetails>{GUID} için çıktıyı ayrıştırıyorum ve bunları yok sayıyorum.

Ardından kalan metin dosyasını CRC ediyorum.

CRC

aynı proje aynı bilgisayar üzerinde inşa edildiğinde aynıdır, ancak aynı proje aynı kaynak kodu ve MSVS 2010 ayarlarla farklı bir bilgisayarda inşa edildiğinde farklıdır.

Bir .NET uygulamasının derlemesinde saklanan makineye bağlı herhangi bir bilgiyi bilen var mı?

Aşağıda, farklılıkların bir örneği verilmiştir. Farklı kimlikleri her nesne ve sınıf tahsis edildiğini görünür, ama garip

  `class DSC_PI.MainWindow/'<>c__DisplayClass21' V_2,` 
     `class DSC_PI.MainWindow/'<>c__DisplayClass10' V_2,` 

     `class DSC_PI.MainWindow/'<>c__DisplayClass1e' V_3,` 
     `class DSC_PI.MainWindow/'<>c__DisplayClassd' V_3,` 

Herhangi bir fikir çok çok takdir ... onlar kod farklı makinelerde üzerine inşa olduğunda bu yalnızca farklı olacağını bulabilirsiniz.

+2

Her iki sistemin de, GAC'deki tüm .NET derlemelerinin aynı sürümleri de dahil, aynı hizmet paketlerinin yüklü olduğundan emin misiniz? Sadece kaynak kodu içeren temiz bir dizinden tam bir yeniden oluşturma yapıyor musunuz? Eski derleme sürümleri bin ve obj dizinlerinde bırakılırken benzer garip problemlerle karşılaştım. –

+0

Hmm, teşekkürler. Bunları araştıracağım ama bu beklenmedik bir aksanın, her şeyi inşa etmek ve sıkıştırmak için bir "ana yapım makinesi" kullanacağımız için gözden kaçmış olabileceğini düşünüyorum. Kriz orada önledi, ama yine de onları anlamaya çalışmakla ilgileniyorum. Ne yazık ki, bu sorunu geride bırakmak ve devam etmek zorunda kalabilirim (bu küçük şey üzerinde uzun zamandır çalışıyordum ...). Yine de yeni bir şey bulursam bunu güncel tutacağım. – ZayJay

+6

MSBUILD kullanarak Visual Studio'yu kullanmak yerine, komut satırından yapılarınızı yapmak için kullandığınız "ana yapı makinesine" geçtiğinizde öneririm. MSBUILD ile tekrarlanabilir sonuçlar elde etmekten çok daha iyi şanslar elde ettim. Ayrıca, otomatikleştirmek daha kolaydır. –

cevap

1

Her iki sistemde de aynı sayıda çekirdek var mı? Değişken isim sonekini saymaya gelince, sonuç derleyici için kullanılan iş parçacığı sayısına bağlı olarak değişebilir.