Уникайте приховування збірок, які використовують класи в просторі імен System.Xml в Dotfuscator, що призведе до помилок

Сторінка оновлюється :
Дата створення сторінки :

Перевірка симптомів

Створіть новий проект. Це може бути Windows Form або WPF, але тут ми створюємо додаток WPF.

Напишіть код, щоб використовувати класи, які належать до простору імен System.Xml. Тут ми використовуємо класи "XmlDocument" і "XmlNode" наступним чином.

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

Після побудови виберіть «Претемптивний дофускатор і аналітику» з інструментів в меню і запустіть його.

PreEmptive Dotfuscator and Analytics を起動

Додайте створений файл .exe і створіть його.

.exe ファイルを追加

Потім з'являється наступне повідомлення про помилку, і збірка не вдається.

Це не керований модуль (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Помилка збірки.

ビルドエラー

Я намагався з'ясувати, що стало причиною цієї помилки, але чіткої відповіді знайти не зміг. З огляду на, що на англійському сайті немає інформації і що шлях System.Xml.dll має "en", можна здогадатися, що це унікальна помилка, відмінна від англійського середовища.

Обхідний шлях

Незважаючи на те, що проект посилається на клієнт Windows System.Xml.dll, коли ви будуєте за допомогою Dotfuscator, він посилається на збірку в Windows Phone System.Xml.dll тому ми примусово скопіювали System.Xml локально.dll Я хотів би уникнути помилок у побудові, посилаючись на це.

Відкрийте посилання на проект, клацніть правою кнопкою миші пункт System.Xml і виберіть пункт Властивості.

プロパティを選択

Змініть елемент локальної копії на True.

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

При побудові в такому стані "System.Xml.dll" виводиться разом з файлом .exe.

System.Xml.dll が出力される

Відкрийте Dotfuscator і додайте "System.Xml.dll" разом з збіркою, яку потрібно приховати. Це затуманює збірку так, що вона не відноситься до DLL встановленого фреймворка і бачить локальний DLL.

Зверніть увагу, що властивість System.Xml.dll перевіряє режим бібліотеки. Без цієї перевірки System.Xml.dll також можуть бути приховані, а назви класів, на які вона посилається, можуть змінюватися. Звичайно, якщо назва класу зміниться, ви не зможете запустити додаток нормально.

System.Xml.dll を追加

Якщо будувати в такому стані, то воно завершиться успішно.

ビルド成功

Ви можете бути впевнені, що заплутане додаток запускається самостійно без проблем.

アプリケーションを起動

Представлений тут контент є обхідним шляхом у дещо складний спосіб, тому ми не можемо гарантувати, що він буде ефективним навіть для збірок, які були побудовані відповідним чином. Навіть якщо збірка успішна і її можна запустити, не можна заперечувати можливість того, що вона впаде при виконанні конкретного процесу, тому, будь ласка, перевірте операцію належним чином перед випуском.

Навіть якщо це не обмежується простором імен System.Xml, обфускація є чутливою функцією, яка вам потрібна, щоб переконатися, що узгодженість зберігається. Зокрема, при використанні рефлексії, ймовірно, постраждають пов'язані з вводом-виводом вводу-виводу речі, такі як введення-виведення файлів і взаємодія із зовнішніми API, тому будьте обережні.