Eviteu ofuscar conjunts que utilitzen classes a l'espai de noms System.Xml a Dotfuscator que provocaran errors
Comprovació dels símptomes
Crear un nou projecte. Pot ser Windows Form o WPF, però aquí estem creant una aplicació WPF.
Escriu codi per utilitzar classes que pertanyen a l'espai de noms System.Xml. Aquí utilitzem les classes de "XmlDocument" i "XmlNode" de la següent manera.
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;
}
}
}
Després de construir, seleccioneu "Dotfuscator i Analytics preventius" de les eines del menú i llanceu-lo.
Afegiu el fitxer .exe que heu creat i el creeu.
A continuació, apareix el missatge d'error següent i la construcció falla.
Aquest no és un mòdul administrat (C:\Fitxers de programa (x86)\Conjunts de referència\Microsoft\Framework\Silverlight\v4.0\Perfil\WindowsPhone71\ja\System.Xml.dll). Error de construcció.
Vaig intentar esbrinar què estava causant aquest error, però no vaig trobar una resposta clara. Tenint en compte que no hi ha informació al lloc anglès i que el camí System.Xml.dll té "en", podeu endevinar que es tracta d'un error únic que no sigui l'entorn anglès.
Solució alternativa
Tot i que el projecte fa referència al client del Windows System.Xml.dll, quan creeu amb Dotfuscator, fa referència a l'assemblat al Windows Phone System.Xml.dll de manera que hem copiat per la mesura el System.Xml localment.dll M'agradaria evitar errors fent referència a ell.
Obriu les referències del projecte, feu clic amb el botó dret del ratolí System.Xml i trieu Propietats.
Canvia l'element de la còpia local a Cert.
Quan creeu en aquest estat, "System.Xml.dll" surt juntament amb el fitxer .exe.
Obriu Dotfuscator i afegiu "System.Xml.dll" juntament amb l'assemblat que voleu ofuscar. Això ofusca el muntatge de manera que no fa referència a la DLL del marc instal·lat i veu la DLL local.
Tingueu en compte que la propietat System.Xml.dll comprova el mode biblioteca. Sense aquesta comprovació, System.Xml.dll també es pot ofuscar, i els noms de classe als quals fa referència poden canviar. Per descomptat, si el nom de la classe canvia, no podreu iniciar l'aplicació normalment.
Si es construeix en aquest estat, es completarà amb èxit.
Podeu estar segur que l'aplicació ofuscada es llança per si sola sense problemes.
El contingut que es presenta aquí és una solució alternativa d'una manera una mica complicada, de manera que no podem garantir que sigui eficaç fins i tot per a les assemblees que s'han construït en conseqüència. Fins i tot si la construcció té èxit i es pot iniciar, no es pot negar la possibilitat que caigui en realitzar un procés específic, de manera que comproveu l'operació correctament abans de la publicació.
Fins i tot si no es limita a l'espai de noms System.Xml, l'ofuscació és una característica sensible que necessiteu per assegurar-vos que es manté la coherència. En particular, quan s'utilitza la reflexió, és probable que es vegin afectades coses relacionades amb l'E / S de fitxers, com ara l'E / S dels fitxers i la interacció amb api externes, així que aneu amb compte.