หลีกเลี่ยงการทําให้งงงวยแอสเซมบลีที่ใช้คลาสในเนมสเปซ 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;
    }
  }
}

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

หลังจากสร้างแล้ว ให้เลือก "PreEmptive Dotfuscator และ Analytics" จากเครื่องมือในเมนูแล้วเปิดใช้งาน

PreEmptive Dotfuscator and Analytics を起動

เพิ่มไฟล์.exeที่คุณสร้างและสร้างไฟล์นั้นขึ้นมา

.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

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

เมื่อคุณสร้างในสถานะนี้ "System.Xml.dll" จะถูกส่งออกพร้อมกับแฟ้ม.exe

System.Xml.dll が出力される

เปิด Dotfuscator และเพิ่ม "System.Xml.dll" พร้อมกับแอสเซมบลีที่คุณต้องการทําให้งวย สิ่งนี้ทําให้แอสเซมบลีสับสนเพื่อไม่ให้อ้างอิงถึง DLL ของเฟรมเวิร์กที่ติดตั้งไว้ และเห็น DLL ภายในเครื่อง

โปรดสังเกตว่า คุณสมบัติ System.Xml.dll ตรวจสอบโหมดไลบรารี หากไม่มีการตรวจสอบนี้ system.xml.dll อาจถูกทําให้งวยและชื่อคลาสที่อ้างอิงอาจมีการเปลี่ยนแปลง แน่นอนหากชื่อชั้นเรียนเปลี่ยนไปคุณจะไม่สามารถเริ่มแอปพลิเคชันได้ตามปกติ

System.Xml.dll を追加

หากคุณสร้างในสถานะนี้มันจะเสร็จสมบูรณ์

ビルド成功

คุณสามารถมั่นใจได้ว่าแอปพลิเคชันที่ทําให้งวยเปิดตัวด้วยตัวเองโดยไม่มีปัญหา

アプリケーションを起動

เนื้อหาที่นําเสนอที่นี่เป็นวิธีแก้ปัญหาในลักษณะที่ค่อนข้างยุ่งยากดังนั้นเราจึงไม่สามารถรับประกันได้ว่ามันจะมีประสิทธิภาพแม้สําหรับการประกอบที่สร้างขึ้นตามนั้น แม้ว่าการสร้างจะประสบความสําเร็จและสามารถเริ่มต้นได้ แต่ก็ไม่มีการปฏิเสธความเป็นไปได้ที่มันจะตกเมื่อดําเนินการตามกระบวนการเฉพาะดังนั้นโปรดตรวจสอบการดําเนินการอย่างถูกต้องก่อนปล่อย

แม้ว่าจะไม่ได้จํากัดอยู่แค่เนมสเปซ System.Xml แต่การทําให้งวยเป็นคุณลักษณะที่ละเอียดอ่อนซึ่งคุณต้องตรวจสอบให้แน่ใจว่ามีการรักษาความสอดคล้องกันไว้ โดยเฉพาะอย่างยิ่งเมื่อใช้การสะท้อน I/O สิ่งที่เกี่ยวข้องกับ I/O เช่น I/O ของไฟล์และการโต้ตอบกับ API ภายนอกมีแนวโน้มที่จะได้รับผลกระทบ ดังนั้นโปรดใช้ความระมัดระวัง