Evitare di offuscare gli assembly che utilizzano classi nello spazio dei nomi System.Xml in Dotfuscator che causeranno errori
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;
}
}
}
Dopo la compilazione, seleziona "PreEmptive Dotfuscator and Analytics" dagli strumenti nel menu e avvialo.
Aggiungere il file .exe creato e compilarlo.
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.
Quando si compila in questo stato, viene generato "System.Xml.dll" insieme al file .exe.
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.
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.