Αποφύγετε τη συσκότιση συγκροτήσεων που χρησιμοποιούν στο χώρο ονομάτων 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;
}
}
}
Μετά τη δημιουργία, επιλέξτε "Προληπτικό Dotfuscator and Analytics" από τα εργαλεία του μενού και ξεκινήστε το.
Προσθέστε το .exe αρχείο που δημιουργήσατε και δημιουργήστε το.
Στη συνέχεια, εμφανίζεται το ακόλουθο μήνυμα λάθους και η δομή αποτυγχάνει.
Αυτή δεν είναι μια διαχειριζόμενη λειτουργική μονάδα (C:\Αρχεία προγραμμάτων (x86)\Συγκροτήματα αναφοράς\Microsoft\Framework\Silverlight\v4.0\Προφίλ\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, οπότε να είστε προσεκτικοί.