Undvik att fördunkla sammansättningar som använder klasser i namnområdet System.Xml i Dotfuscator som orsakar fel
Kontrollera symtomen
Skapa ett nytt projekt. Det kan vara Windows Form eller WPF, men här skapar vi en WPF-applikation.
Skriv kod för att använda klasser som tillhör System.Xml namnområdet. Här använder vi klasserna "XmlDocument" och "XmlNode" enligt följande.
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;
}
}
}
När du har byggt väljer du "PreEmptive Dotfuscator and Analytics" från verktygen i menyn och startar den.
Lägg till .exe-filen som du skapade och skapa den.
Sedan visas följande felmeddelande och bygget misslyckas.
Det här är inte en hanterad modul (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Byggfel.
Jag försökte ta reda på vad som orsakade detta fel, men jag kunde inte hitta ett tydligt svar. Med tanke på att det inte finns någon information på den engelska webbplatsen och att System.Xml.dll sökvägen har "en", kan du gissa att det är ett annat unikt fel än den engelska miljön.
Lösning
Även om projektet refererar till Windows-klienten System.Xml.dll refererar det till sammansättningen i Windows Phone System.Xml.dll så vi kopierade System.Xml med våld System.Xml lokalt.dll Jag skulle vilja undvika byggfel genom att hänvisa till det.
Öppna projektets referenser, högerklicka på System.Xml och välj Egenskaper.
Ändra objektet i den lokala kopian till Sant.
När du skapar i det här tillståndet matas "System.Xml.dll" ut tillsammans med .exe filen.
Öppna Dotfuscator och lägg till "System.Xml.dll" tillsammans med den sammansättning du vill dölja. Detta döljer sammansättningen så att den inte refererar till det installerade ramverkets DLL och ser den lokala DLL-filen.
Observera att egenskapen System.Xml.dll kontrollerar biblioteksläge. Utan den här kontrollen kan System.Xml.dll också döljas, och de klassnamn som den refererar till kan ändras. Naturligtvis, om klassnamnet ändras, kommer du inte att kunna starta programmet normalt.
Om du bygger i det här tillståndet kommer det att slutföras framgångsrikt.
Du kan vara säker på att den fördunklade applikationen startar på egen hand utan problem.
Innehållet som presenteras här är en lösning på ett något knepigt sätt, så vi kan inte garantera att det kommer att vara effektivt även för enheter som har konstruerats i enlighet därmed. Även om byggnaden är framgångsrik och kan startas, kan det inte förnekas möjligheten att den kommer att falla när du utför en specifik process, så kontrollera operationen ordentligt innan den släpps.
Även om det inte är begränsat till Namnområdet System.Xml är fördunkling en känslig funktion som du måste se till att konsekvensen upprätthålls. I synnerhet när du använder reflektion kommer I / O-relaterade saker som fil-I / O och interaktion med externa API: er sannolikt att påverkas, så var försiktig.