หลีกเลี่ยงการทําให้งงงวยแอสเซมบลีที่ใช้คลาสในเนมสเปซ System.Xml ใน Dotfuscator ที่จะทําให้เกิดข้อผิดพลาด
การตรวจสอบอาการ
สร้างโครงการใหม่ อาจเป็น Windows Form หรือ WPF แต่ที่นี่เรากําลังสร้างแอปพลิเคชัน WPF
เขียนโค้ดเพื่อใช้คลาสที่เป็นของเนมสเปซ System.Xml ที่นี่เราใช้คลาสของ "XmlDocument" และ "XmlNode" ดังนี้
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;
}
}
}
หลังจากสร้างแล้ว ให้เลือก "PreEmptive Dotfuscator และ Analytics" จากเครื่องมือในเมนูแล้วเปิดใช้งาน
เพิ่มไฟล์.exeที่คุณสร้างและสร้างไฟล์นั้นขึ้นมา
ข้อความแสดงข้อผิดพลาดต่อไปนี้ปรากฏขึ้น และการสร้างล้มเหลว
นี่ไม่ใช่โมดูลที่มีการจัดการ (C:\แฟ้มโปรแกรม (x86)\แอสเซมบลีอ้างอิง\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll) สร้างข้อผิดพลาด
ฉันพยายามค้นหาว่าอะไรเป็นสาเหตุของข้อผิดพลาดนี้ แต่ฉันไม่พบคําตอบที่ชัดเจน เมื่อพิจารณาว่าไม่มีข้อมูลในเว็บไซต์ภาษาอังกฤษและเส้นทาง system.xml.dll มี "en" คุณสามารถเดาได้ว่าเป็นข้อผิดพลาดเฉพาะนอกเหนือจากสภาพแวดล้อมภาษาอังกฤษ
วิธีแก้ปัญหา
แม้ว่าโครงการจะอ้างอิงถึง System.Xml.dll ไคลเอ็นต์ Windows แต่เมื่อคุณสร้างด้วย Dotfuscator จะอ้างอิงถึงแอสเซมบลีในระบบโทรศัพท์ Windows.Xml.dll ดังนั้นเราจึงบังคับให้คัดลอก System.Xml ภายในเครื่อง.dll ฉันต้องการหลีกเลี่ยงข้อผิดพลาดในการสร้างโดยอ้างถึงมัน
เปิดการอ้างอิงของโครงการ แล้วคลิกขวาที่ System.Xml แล้วเลือก คุณสมบัติ
เปลี่ยนรายการในสําเนาภายในเครื่องเป็น True
เมื่อคุณสร้างในสถานะนี้ "System.Xml.dll" จะถูกส่งออกพร้อมกับแฟ้ม.exe
เปิด Dotfuscator และเพิ่ม "System.Xml.dll" พร้อมกับแอสเซมบลีที่คุณต้องการทําให้งวย สิ่งนี้ทําให้แอสเซมบลีสับสนเพื่อไม่ให้อ้างอิงถึง DLL ของเฟรมเวิร์กที่ติดตั้งไว้ และเห็น DLL ภายในเครื่อง
โปรดสังเกตว่า คุณสมบัติ System.Xml.dll ตรวจสอบโหมดไลบรารี หากไม่มีการตรวจสอบนี้ system.xml.dll อาจถูกทําให้งวยและชื่อคลาสที่อ้างอิงอาจมีการเปลี่ยนแปลง แน่นอนหากชื่อชั้นเรียนเปลี่ยนไปคุณจะไม่สามารถเริ่มแอปพลิเคชันได้ตามปกติ
หากคุณสร้างในสถานะนี้มันจะเสร็จสมบูรณ์
คุณสามารถมั่นใจได้ว่าแอปพลิเคชันที่ทําให้งวยเปิดตัวด้วยตัวเองโดยไม่มีปัญหา
เนื้อหาที่นําเสนอที่นี่เป็นวิธีแก้ปัญหาในลักษณะที่ค่อนข้างยุ่งยากดังนั้นเราจึงไม่สามารถรับประกันได้ว่ามันจะมีประสิทธิภาพแม้สําหรับการประกอบที่สร้างขึ้นตามนั้น แม้ว่าการสร้างจะประสบความสําเร็จและสามารถเริ่มต้นได้ แต่ก็ไม่มีการปฏิเสธความเป็นไปได้ที่มันจะตกเมื่อดําเนินการตามกระบวนการเฉพาะดังนั้นโปรดตรวจสอบการดําเนินการอย่างถูกต้องก่อนปล่อย
แม้ว่าจะไม่ได้จํากัดอยู่แค่เนมสเปซ System.Xml แต่การทําให้งวยเป็นคุณลักษณะที่ละเอียดอ่อนซึ่งคุณต้องตรวจสอบให้แน่ใจว่ามีการรักษาความสอดคล้องกันไว้ โดยเฉพาะอย่างยิ่งเมื่อใช้การสะท้อน I/O สิ่งที่เกี่ยวข้องกับ I/O เช่น I/O ของไฟล์และการโต้ตอบกับ API ภายนอกมีแนวโน้มที่จะได้รับผลกระทบ ดังนั้นโปรดใช้ความระมัดระวัง