Vyhněte se zmatení sestavení, která používají třídy v oboru názvů System.Xml v Dotfuscator, které způsobí chyby
Kontrola příznaků
Vytvořte nový projekt. Může to být Windows Form nebo WPF, ale zde vytváříme aplikaci WPF.
Napište kód pro použití tříd, které patří do oboru názvů System.Xml. Zde používáme třídy "XmlDocument" a "XmlNode" následujícím způsobem.
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;
}
}
}
Po sestavení vyberte z nástrojů v nabídce "PreEmptive Dotfuscator and Analytics" a spusťte jej.
Přidejte soubor .exe, který jste vytvořili, a sestavte jej.
Potom se zobrazí následující chybová zpráva a sestavení se nezdaří.
Toto není spravovaný modul (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Chyba sestavení.
Snažil jsem se zjistit, co způsobuje tuto chybu, ale nemohl jsem najít jasnou odpověď. Vzhledem k tomu, že na anglickém webu nejsou žádné informace a že cesta System.Xml.dll má "en", můžete odhadnout, že se jedná o jedinečnou chybu jinou než anglické prostředí.
Řešení
I když projekt odkazuje na klienta Windows System.Xml.dll, při sestavování pomocí Dotfuscator odkazuje na sestavení v souboru Windows Phone System.Xml.dll takže jsme vynutili místní zkopírování souboru System.Xml.dll Rád bych se vyhnul chybám sestavení tím, že na něj odkazuji.
Otevřete odkazy na projekt, klikněte pravým tlačítkem na System.Xml a zvolte Vlastnosti.
Změňte položku v místní kopii na True.
Při sestavování v tomto stavu je výstupem "System.Xml.dll" spolu se souborem .exe.
Otevřete Dotfuscator a přidejte "System.Xml.dll" spolu se sestavením, které chcete zamlžit. To zamlží sestavení tak, aby neodkazovalo na knihovnu DLL nainstalovaného rozhraní a vidělo místní knihovnu DLL.
Všimněte si, že vlastnost System.Xml.dll kontroluje režim knihovny. Bez této kontroly může být soubor System.Xml.dll také zamlžený a názvy tříd, na které odkazuje, se mohou změnit. Samozřejmě, pokud se název třídy změní, nebudete moci aplikaci spustit normálně.
Pokud sestavíte v tomto stavu, bude úspěšně dokončeno.
Můžete si být jisti, že se zmatená aplikace spustí sama bez problémů.
Zde prezentovaný obsah je řešením poněkud složitým způsobem, takže nemůžeme zaručit, že bude účinný i pro sestavy, které byly odpovídajícím způsobem konstruovány. I když je sestavení úspěšné a lze jej spustit, nelze popřít možnost, že při provádění konkrétního procesu spadne, proto před vydáním řádně zkontrolujte operaci.
I když není omezena na obor názvů System.Xml, obfuskace je citlivá funkce, kterou potřebujete k zajištění zachování konzistence. Zejména při použití reflexe budou pravděpodobně ovlivněny vstupně-výstupní operace související se vstupně-výstupními operacemi, jako jsou vstupně-výstupní operace se soubory a interakce s externími rozhraními API, takže buďte opatrní.