Evitare di offuscare gli assembly che utilizzano classi nello spazio dei nomi System.Xml in Dotfuscator che causeranno errori

Pagina aggiornata :
Data di creazione della pagina :

Controllo dei sintomi

Creare un nuovo progetto. Può essere Windows Form o WPF, ma qui stiamo creando un'applicazione WPF.

Scrivere codice per utilizzare classi che appartengono allo spazio dei nomi System.Xml. Qui usiamo le classi di "XmlDocument" e "XmlNode" come segue.

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 名前空間のクラスを使用したコード

Dopo la compilazione, seleziona "PreEmptive Dotfuscator and Analytics" dagli strumenti nel menu e avvialo.

PreEmptive Dotfuscator and Analytics を起動

Aggiungere il file .exe creato e compilarlo.

.exe ファイルを追加

Quindi, viene visualizzato il seguente messaggio di errore e la compilazione non riesce.

Non si tratta di un modulo gestito (C:\Programmi (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Errore di compilazione.

ビルドエラー

Ho provato a scoprire cosa stava causando questo errore, ma non sono riuscito a trovare una risposta chiara. Considerando che non ci sono informazioni sul sito inglese e che il percorso System.Xml.dll ha "en", si può intuire che si tratta di un errore univoco diverso dall'ambiente inglese.

Soluzione alternativa

Anche se il progetto fa riferimento al client Windows System.Xml.dll, quando si compila con Dotfuscator, fa riferimento all'assembly in Windows Phone System.Xml.dll quindi system.xml è stato copiato forzatamente localmente.dll Vorrei evitare errori di compilazione facendo riferimento ad esso.

Aprire i riferimenti del progetto, fare clic con il pulsante destro del mouse su System.Xml e scegliere Proprietà.

プロパティを選択

Modificare l'elemento nella copia locale in True.

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

Quando si compila in questo stato, viene generato "System.Xml.dll" insieme al file .exe.

System.Xml.dll が出力される

Aprire Dotfuscator e aggiungere "System.Xml.dll" insieme all'assembly che si desidera offuscare. In questo modo l'assembly viene offuscato in modo che non faccia riferimento alla DLL del framework installato e veda la DLL locale.

Si noti che la proprietà System.Xml.dll controlla la modalità libreria. Senza questo controllo, anche System.Xml.dll potrebbe essere offuscato e i nomi delle classi a cui fa riferimento potrebbero cambiare. Naturalmente, se il nome della classe cambia, non sarà possibile avviare normalmente l'applicazione.

System.Xml.dll を追加

Se si compila in questo stato, verrà completato correttamente.

ビルド成功

Puoi essere sicuro che l'applicazione offuscata si avvia da sola senza problemi.

アプリケーションを起動

Il contenuto qui presentato è una soluzione alternativa in un modo un po 'complicato, quindi non possiamo garantire che sarà efficace anche per gli assiemi che sono stati costruiti di conseguenza. Anche se la build ha successo e può essere avviata, non si può negare la possibilità che cada durante l'esecuzione di un processo specifico, quindi si prega di controllare correttamente l'operazione prima del rilascio.

Anche se non è limitato allo spazio dei nomi System.Xml, l'offuscamento è una funzionalità sensibile che è necessario per assicurarsi che la coerenza venga mantenuta. In particolare, quando si utilizza la riflessione, è probabile che le cose correlate all'I/O dei file come l'I/O dei file e l'interazione con le API esterne siano influenzate, quindi fai attenzione.