הימנע מטשטוש הרכבות המשתמשות במחלקות במרחב השמות System.Xml ב- Dotfuscator שיגרום לשגיאות
בדיקת התסמינים
צור פרוייקט חדש. זה יכול להיות טופס Windows או 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:\Program Files (x86)\מכלולים של הפניה\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). בנה שגיאה.
ניסיתי לברר מה גורם לשגיאה הזו, אבל לא מצאתי תשובה ברורה. בהתחשב בכך שאין מידע באתר באנגלית וכי נתיב System.Xml.dll יש "en", אתה יכול לנחש כי זוהי שגיאה ייחודית אחרת מאשר הסביבה האנגלית.
פתרון
למרות שהפרויקט מפנה ללקוח Windows System.Xml.dll, כאשר אתה בונה עם Dotfuscator, הוא מפנה להרכבה ב- Windows Phone System.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, ערפול הוא תכונה רגישה שעליך לוודא שהעקביות נשמרת. בפרט, בעת שימוש בהשתקפות, דברים הקשורים לקלט/פלט כגון קלט/פלט של קבצים ואינטראקציה עם ממשקי API חיצוניים צפויים להיות מושפעים, לכן היזהר.