Dotfuscator'daki System.Xml ad alanındaki sınıfları kullanan ve hatalara neden olacak derlemeleri gizlemekten kaçının

Sayfa güncel :
Sayfa oluşturma tarihi :

Semptomları Kontrol Etme

Yeni bir proje oluşturun. Windows Form veya WPF olabilir, ancak burada bir WPF uygulaması oluşturuyoruz.

System.Xml ad alanına ait sınıfları kullanmak için kod yazın. Burada "XmlDocument" ve "XmlNode" sınıflarını aşağıdaki gibi kullanıyoruz.

using System.Windows;
using System.Xml;

namespace DotfuscatorTest
{
  /// <summary>MainWindow.xaml の相互作用ロジック</;summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();

      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<a></a>");
      XmlNode node = doc.FirstChild;
    }
  }
}

System.Xml 名前空間のクラスを使用したコード

Oluşturduktan sonra, menüdeki araçlardan "PreEmptive Dotfuscator and Analytics" i seçin ve başlatın.

PreEmptive Dotfuscator and Analytics を起動

Oluşturduğunuz .exe dosyasını ekleyin ve oluşturun.

.exe ファイルを追加

Ardından, aşağıdaki hata iletisi görüntülenir ve yapı başarısız olur.

Bu yönetilen bir modül değildir (C:\Program Files (x86)\Başvuru Derlemeleri\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Derleme hatası.

ビルドエラー

Bu hataya neyin neden olduğunu bulmaya çalıştım, ancak net bir cevap bulamadım. İngilizce sitede bilgi olmadığını ve System.Xml.dll yolunda "en" olduğunu düşünürsek, İngilizce ortamı dışında benzersiz bir hata olduğunu tahmin edebilirsiniz.

Geçici çözüm

Proje, Windows istemcisi System.Xml.dll başvursa da, Dotfuscator ile derlediğinizde, Windows Phone System.Xml'deki derlemeye başvurur.dll bu nedenle System.Xml'i yerel olarak zorla kopyaladık.dll Buna atıfta bulunarak yapı hatalarından kaçınmak istiyorum.

Projenin başvurularını açın, System.Xml'e sağ tıklayın ve Özellikler'i seçin.

プロパティを選択

Yerel kopyadaki öğeyi Doğru olarak değiştirin.

ローカル コピーの項目を True に変更

Bu durumda oluşturduğunuzda, "System.Xml.dll" .exe dosyasıyla birlikte çıktısı alınır.

System.Xml.dll が出力される

Dotfuscator'u açın ve gizlemek istediğiniz derlemeyle birlikte "System.Xml.dll" ekleyin. Bu, derlemeyi gizler, böylece yüklü çerçevenin DLL'sine başvurmaz ve yerel DLL'yi görür.

System.Xml.dll özelliğinin Kitaplık Modu'nu denetlediğini unutmayın. Bu denetim olmadan, System.Xml.dll de gizlenebilir ve başvurduğu sınıf adları değişebilir. Tabii ki, sınıf adı değişirse, uygulamayı normal şekilde başlatamazsınız.

System.Xml.dll を追加

Bu durumda oluşturursanız, başarıyla tamamlanır.

ビルド成功

Gizlenmiş uygulamanın sorunsuz bir şekilde kendi başına başlatıldığından emin olabilirsiniz.

アプリケーションを起動

Burada sunulan içerik biraz zor bir şekilde geçici bir çözümdür, bu nedenle buna göre oluşturulmuş montajlar için bile etkili olacağını garanti edemeyiz. Yapı başarılı olsa ve başlatılabilse bile, belirli bir işlemi gerçekleştirirken düşme olasılığını inkar etmek mümkün değildir, bu nedenle lütfen serbest bırakmadan önce işlemi düzgün bir şekilde kontrol edin.

System.Xml ad alanıyla sınırlı olmasa bile, gizleme, tutarlılığın korunduğundan emin olmak için ihtiyacınız olan hassas bir özelliktir. Özellikle, yansımayı kullanırken, dosya G/Ç ve harici API'lerle etkileşim gibi G/Ç ile ilgili şeylerin etkilenmesi muhtemeldir, bu nedenle dikkatli olun.