Elakkan perhimpunan obfuscating yang menggunakan kelas dalam ruang nama System.Xml dalam Dotfuscator yang akan menyebabkan ralat
Memeriksa Gejala
Buat projek baru. Ia boleh menjadi Borang Windows atau WPF, tetapi di sini kami membuat aplikasi WPF.
Tulis kod untuk menggunakan kelas yang tergolong dalam ruang nama System.Xml. Di sini kita menggunakan kelas "XmlDocument" dan "XmlNode" seperti berikut.
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;
}
}
}
Selepas membina, pilih "PreEmptive Dotfuscator and Analytics" dari alat dalam menu dan lancarkannya.
Tambah fail .exe yang anda cipta dan binanya.
Kemudian, mesej ralat berikut muncul dan binaan gagal.
Ini bukan modul terurus (C:\Fail Program (x86)\Perhimpunan Rujukan\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Ralat bina.
Saya cuba mencari tahu apa yang menyebabkan kesilapan ini, tetapi saya tidak dapat mencari jawapan yang jelas. Memandangkan tidak ada maklumat di laman web Inggeris dan bahawa system.Xml.dll jalan mempunyai "en", anda boleh meneka bahawa ia adalah ralat yang unik selain daripada persekitaran bahasa Inggeris.
Penyelesaian
Walaupun projek itu merujuk klien Windows System.Xml.dll, apabila anda membina dengan Dotfuscator, ia merujuk pemasangan dalam Windows Phone System.Xml.dll jadi kami secara paksa menyalin System.Xml secara tempatan.dll Saya ingin mengelakkan kesilapan membina dengan merujuk kepadanya.
Buka rujukan projek, klik kanan System.Xml dan pilih Properties.
Tukar item dalam salinan setempat kepada Benar.
Apabila anda membina dalam keadaan ini, "System.Xml.dll" dikeluarkan bersama-sama dengan fail .exe.
Buka Dotfuscator dan tambah "System.Xml.dll" bersama-sama dengan pemasangan yang anda mahu mengelirukan. Ini mengelirukan perhimpunan supaya ia tidak merujuk kepada DLL rangka kerja yang dipasang dan melihat DLL tempatan.
Ambil perhatian bahawa sifat System.Xml.dll menyemak Mod Perpustakaan. Tanpa semakan ini, System.Xml.dll juga boleh dikelirukan, dan nama kelas yang dirujuknya mungkin berubah. Sudah tentu, jika nama kelas berubah, anda tidak akan dapat memulakan aplikasi secara normal.
Jika anda membina dalam keadaan ini, ia akan berjaya diselesaikan.
Anda boleh yakin bahawa aplikasi yang keliru dilancarkan sendiri tanpa masalah.
Kandungan yang dibentangkan di sini adalah penyelesaian dengan cara yang agak rumit, jadi kami tidak dapat menjamin bahawa ia akan berkesan walaupun untuk perhimpunan yang telah dibina dengan sewajarnya. Walaupun binaan berjaya dan boleh dimulakan, tidak dapat dinafikan kemungkinan bahawa ia akan jatuh apabila melakukan proses tertentu, jadi sila periksa operasi dengan betul sebelum dibebaskan.
Walaupun ia tidak terhad kepada ruang nama System.Xml, kekeliruan adalah ciri sensitif yang anda perlukan untuk memastikan bahawa konsistensi dikekalkan. Khususnya, apabila menggunakan refleksi, perkara yang berkaitan dengan I / O seperti fail I / O dan interaksi dengan API luaran mungkin akan terjejas, jadi berhati-hati.