Undgå at sløre assemblyer, der bruger klasser i System.Xml-navneområdet i Dotfuscator, der vil forårsage fejl
Kontrol af symptomerne
Opret et nyt projekt. Det kan være Windows Form eller WPF, men her opretter vi en WPF-applikation.
Skriv kode for at bruge klasser, der tilhører System.Xml-navneområdet. Her bruger vi klasserne "XmlDocument" og "XmlNode" som følger.
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;
}
}
}
Efter opbygning skal du vælge "PreEmptive Dotfuscator and Analytics" fra værktøjerne i menuen og starte den.
Tilføj den .exe fil, du har oprettet, og opret den.
Derefter vises følgende fejlmeddelelse, og buildet mislykkes.
Dette er ikke et administreret modul (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Byg fejl.
Jeg forsøgte at finde ud af, hvad der forårsagede denne fejl, men jeg kunne ikke finde et klart svar. I betragtning af at der ikke er nogen oplysninger på det engelske websted, og at System.Xml.dll-stien har "en", kan du gætte, at det er en unik fejl bortset fra det engelske miljø.
Løsning
Selvom projektet refererer til Windows-klienten System.Xml.dll, når du bygger med Dotfuscator, refererer det til samlingen i Windows Phone System.Xml.dll så vi kopierede system.Xml med magt lokalt.dll Jeg vil gerne undgå byggefejl ved at henvise til det.
Åbn projektets referencer, højreklik på System.Xml, og vælg Egenskaber.
Skift elementet i den lokale kopi til Sand.
Når du bygger i denne tilstand, udsendes "System.Xml.dll" sammen med .exe-filen.
Åbn Dotfuscator, og tilføj "System.Xml.dll" sammen med den samling, du vil tilsløre. Dette tilslører samlingen, så den ikke henviser til den installerede frameworks DLL og ser den lokale DLL.
Bemærk, at egenskaben System.Xml.dll kontrollerer bibliotekstilstand. Uden denne kontrol kan System.Xml.dll også være tilsløret, og de klassenavne, den henviser til, kan ændre sig. Selvfølgelig, hvis klassenavnet ændres, vil du ikke være i stand til at starte applikationen normalt.
Hvis du bygger i denne tilstand, vil den fuldføre med succes.
Du kan være sikker på, at den korrumperede applikation starter alene uden problemer.
Indholdet, der præsenteres her, er en løsning på en noget vanskelig måde, så vi kan ikke garantere, at det vil være effektivt, selv for samlinger, der er konstrueret i overensstemmelse hermed. Selvom bygningen er vellykket og kan startes, kan man ikke benægte muligheden for, at den falder, når du udfører en bestemt proces, så kontroller operationen korrekt inden udgivelsen.
Selvom det ikke er begrænset til System.Xml-navneområdet, er tilsløring en følsom funktion, som du skal sørge for, at konsistensen opretholdes. Især når du bruger refleksion, vil I / O-relaterede ting som fil I / O og interaktion med eksterne API'er sandsynligvis blive påvirket, så vær forsigtig.