Vermijd het verduisteren van assembly's die klassen in de System.Xml-naamruimte in Dotfuscator gebruiken die fouten veroorzaken

Pagina bijgewerkt :
Aanmaakdatum van pagina :

De symptomen controleren

Maak een nieuw project. Het kan Windows Form of WPF zijn, maar hier maken we een WPF-applicatie.

Schrijf code om klassen te gebruiken die tot de System.Xml-naamruimte behoren. Hier gebruiken we de klassen "XmlDocument" en "XmlNode" als volgt.

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 名前空間のクラスを使用したコード

Selecteer na het bouwen "PreEmptive Dotfuscator and Analytics" in de tools in het menu en start het.

PreEmptive Dotfuscator and Analytics を起動

Voeg het .exe bestand toe dat u hebt gemaakt en bouw het.

.exe ファイルを追加

Vervolgens wordt het volgende foutbericht weergegeven en mislukt de build.

Dit is geen beheerde module (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Build fout.

ビルドエラー

Ik probeerde erachter te komen wat deze fout veroorzaakte, maar ik kon geen duidelijk antwoord vinden. Gezien het feit dat er geen informatie op de Engelse site staat en dat het System.Xml.dll pad "en" heeft, kunt u raden dat het een unieke fout is anders dan de Engelse omgeving.

Tijdelijke oplossing

Hoewel het project verwijst naar de Windows-client System.Xml.dll, verwijst het, wanneer u met Dotfuscator bouwt, naar de assembly in het Windows Phone System.Xml.dll dus hebben we de System.Xml lokaal met geweld gekopieerd.dll Ik wil bouwfouten voorkomen door ernaar te verwijzen.

Open de referenties van het project, klik met de rechtermuisknop op System.Xml en kies Eigenschappen.

プロパティを選択

Wijzig het item in de lokale kopie in True.

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

Wanneer u deze status inbouwt, wordt "System.Xml.dll" samen met het .exe-bestand uitgevoerd.

System.Xml.dll が出力される

Open Dotfuscator en voeg "System.Xml.dll" toe, samen met de assembly die u wilt verbergen. Hierdoor wordt de assembly verduisterd, zodat deze niet verwijst naar de DLL van het geïnstalleerde framework en de lokale DLL wordt weergegeven.

De eigenschap System.Xml.dll controleert de bibliotheekmodus. Zonder deze controle kan System.Xml.dll ook worden verduisterd en kunnen de klassenamen waarnaar het verwijst, worden gewijzigd. Als de naam van de klasse verandert, kunt u de toepassing natuurlijk niet normaal starten.

System.Xml.dll を追加

Als u in deze staat bouwt, wordt deze met succes voltooid.

ビルド成功

U kunt er zeker van zijn dat de verduisterde toepassing zonder problemen vanzelf wordt gestart.

アプリケーションを起動

De inhoud die hier wordt gepresenteerd, is een tijdelijke oplossing op een enigszins lastige manier, dus we kunnen niet garanderen dat het effectief zal zijn, zelfs voor assemblages die dienovereenkomstig zijn gebouwd. Zelfs als de build succesvol is en kan worden gestart, valt niet te ontkennen dat deze zal vallen bij het uitvoeren van een specifiek proces, dus controleer de bewerking goed voordat u deze vrijgeeft.

Zelfs als het niet beperkt is tot de System.Xml-naamruimte, is verduistering een gevoelige functie die u nodig hebt om ervoor te zorgen dat de consistentie behouden blijft. Met name bij het gebruik van reflectie worden I/O-gerelateerde zaken zoals bestands-I/O en interactie met externe API's waarschijnlijk beïnvloed, dus wees voorzichtig.