Избегайте обфускации сборок, использующих классы в пространстве имен 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;
}
}
}
После сборки выберите «PreEmptive Dotfuscator and Analytics» из инструментов в меню и запустите его.
Добавьте созданный .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, поэтому будьте осторожны.