Уникайте приховування збірок, які використовують класи в просторі імен 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;
}
}
}
Після побудови виберіть «Претемптивний дофускатор і аналітику» з інструментів в меню і запустіть його.
Додайте створений файл .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.
При побудові в такому стані "System.Xml.dll" виводиться разом з файлом .exe.
Відкрийте Dotfuscator і додайте "System.Xml.dll" разом з збіркою, яку потрібно приховати. Це затуманює збірку так, що вона не відноситься до DLL встановленого фреймворка і бачить локальний DLL.
Зверніть увагу, що властивість System.Xml.dll перевіряє режим бібліотеки. Без цієї перевірки System.Xml.dll також можуть бути приховані, а назви класів, на які вона посилається, можуть змінюватися. Звичайно, якщо назва класу зміниться, ви не зможете запустити додаток нормально.
Якщо будувати в такому стані, то воно завершиться успішно.
Ви можете бути впевнені, що заплутане додаток запускається самостійно без проблем.
Представлений тут контент є обхідним шляхом у дещо складний спосіб, тому ми не можемо гарантувати, що він буде ефективним навіть для збірок, які були побудовані відповідним чином. Навіть якщо збірка успішна і її можна запустити, не можна заперечувати можливість того, що вона впаде при виконанні конкретного процесу, тому, будь ласка, перевірте операцію належним чином перед випуском.
Навіть якщо це не обмежується простором імен System.Xml, обфускація є чутливою функцією, яка вам потрібна, щоб переконатися, що узгодженість зберігається. Зокрема, при використанні рефлексії, ймовірно, постраждають пов'язані з вводом-виводом вводу-виводу речі, такі як введення-виведення файлів і взаємодія із зовнішніми API, тому будьте обережні.