Dotfuscator'daki System.Xml ad alanındaki sınıfları kullanan ve hatalara neden olacak derlemeleri gizlemekten kaçının
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;
}
}
}
Oluşturduktan sonra, menüdeki araçlardan "PreEmptive Dotfuscator and Analytics" i seçin ve başlatın.
Oluşturduğunuz .exe dosyasını ekleyin ve oluşturun.
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.
Bu durumda oluşturduğunuzda, "System.Xml.dll" .exe dosyasıyla birlikte çıktısı alınır.
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.
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.