Vyhněte se zmatení sestavení, která používají třídy v oboru názvů System.Xml v Dotfuscator, které způsobí chyby

Stránky aktualizovány :
Datum vytvoření stránky :

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;
    }
  }
}

System.Xml 名前空間のクラスを使用したコード

Po sestavení vyberte z nástrojů v nabídce "PreEmptive Dotfuscator and Analytics" a spusťte jej.

PreEmptive Dotfuscator and Analytics を起動

Přidejte soubor .exe, který jste vytvořili, a sestavte jej.

.exe ファイルを追加

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.

ローカル コピーの項目を True に変更

Při sestavování v tomto stavu je výstupem "System.Xml.dll" spolu se souborem .exe.

System.Xml.dll が出力される

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ě.

System.Xml.dll を追加

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í.