Undgå at sløre assemblyer, der bruger klasser i System.Xml-navneområdet i Dotfuscator, der vil forårsage fejl

Side opdateret :
Dato for oprettelse af side :

Kontrol af symptomerne

Opret et nyt projekt. Det kan være Windows Form eller WPF, men her opretter vi en WPF-applikation.

Skriv kode for at bruge klasser, der tilhører System.Xml-navneområdet. Her bruger vi klasserne "XmlDocument" og "XmlNode" som følger.

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

Efter opbygning skal du vælge "PreEmptive Dotfuscator and Analytics" fra værktøjerne i menuen og starte den.

PreEmptive Dotfuscator and Analytics を起動

Tilføj den .exe fil, du har oprettet, og opret den.

.exe ファイルを追加

Derefter vises følgende fejlmeddelelse, og buildet mislykkes.

Dette er ikke et administreret modul (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Byg fejl.

ビルドエラー

Jeg forsøgte at finde ud af, hvad der forårsagede denne fejl, men jeg kunne ikke finde et klart svar. I betragtning af at der ikke er nogen oplysninger på det engelske websted, og at System.Xml.dll-stien har "en", kan du gætte, at det er en unik fejl bortset fra det engelske miljø.

Løsning

Selvom projektet refererer til Windows-klienten System.Xml.dll, når du bygger med Dotfuscator, refererer det til samlingen i Windows Phone System.Xml.dll så vi kopierede system.Xml med magt lokalt.dll Jeg vil gerne undgå byggefejl ved at henvise til det.

Åbn projektets referencer, højreklik på System.Xml, og vælg Egenskaber.

プロパティを選択

Skift elementet i den lokale kopi til Sand.

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

Når du bygger i denne tilstand, udsendes "System.Xml.dll" sammen med .exe-filen.

System.Xml.dll が出力される

Åbn Dotfuscator, og tilføj "System.Xml.dll" sammen med den samling, du vil tilsløre. Dette tilslører samlingen, så den ikke henviser til den installerede frameworks DLL og ser den lokale DLL.

Bemærk, at egenskaben System.Xml.dll kontrollerer bibliotekstilstand. Uden denne kontrol kan System.Xml.dll også være tilsløret, og de klassenavne, den henviser til, kan ændre sig. Selvfølgelig, hvis klassenavnet ændres, vil du ikke være i stand til at starte applikationen normalt.

System.Xml.dll を追加

Hvis du bygger i denne tilstand, vil den fuldføre med succes.

ビルド成功

Du kan være sikker på, at den korrumperede applikation starter alene uden problemer.

アプリケーションを起動

Indholdet, der præsenteres her, er en løsning på en noget vanskelig måde, så vi kan ikke garantere, at det vil være effektivt, selv for samlinger, der er konstrueret i overensstemmelse hermed. Selvom bygningen er vellykket og kan startes, kan man ikke benægte muligheden for, at den falder, når du udfører en bestemt proces, så kontroller operationen korrekt inden udgivelsen.

Selvom det ikke er begrænset til System.Xml-navneområdet, er tilsløring en følsom funktion, som du skal sørge for, at konsistensen opretholdes. Især når du bruger refleksion, vil I / O-relaterede ting som fil I / O og interaktion med eksterne API'er sandsynligvis blive påvirket, så vær forsigtig.