Undvik att fördunkla sammansättningar som använder klasser i namnområdet System.Xml i Dotfuscator som orsakar fel

Sidan uppdaterad :
Datum för skapande av sida :

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

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

När du har byggt väljer du "PreEmptive Dotfuscator and Analytics" från verktygen i menyn och startar den.

PreEmptive Dotfuscator and Analytics を起動

Lägg till .exe-filen som du skapade och skapa den.

.exe ファイルを追加

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.

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

När du skapar i det här tillståndet matas "System.Xml.dll" ut tillsammans med .exe filen.

System.Xml.dll が出力される

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

System.Xml.dll を追加

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.