Αποφύγετε τη συσκότιση συγκροτήσεων που χρησιμοποιούν στο χώρο ονομάτων 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;
    }
  }
}

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

Μετά τη δημιουργία, επιλέξτε "Προληπτικό Dotfuscator and Analytics" από τα εργαλεία του μενού και ξεκινήστε το.

PreEmptive Dotfuscator and Analytics を起動

Προσθέστε το .exe αρχείο που δημιουργήσατε και δημιουργήστε το.

.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.

ローカル コピーの項目を 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, η συσκότιση είναι ένα ευαίσθητο χαρακτηριστικό που χρειάζεστε για να βεβαιωθείτε ότι διατηρείται η συνέπεια. Συγκεκριμένα, όταν χρησιμοποιείτε αντανάκλαση, είναι πιθανό να επηρεαστούν πράγματα που σχετίζονται με εισόδους/εξόδους αρχείων, όπως η είσοδος/έξοδος αρχείου και η αλληλεπίδραση με εξωτερικά API, οπότε να είστε προσεκτικοί.