Unikaj zaciemniania zestawów, które używają klas w przestrzeni nazw System.Xml w Dotfuscator, które powodują błędy
Sprawdzanie objawów
Utwórz nowy projekt. Może to być Windows Form lub WPF, ale tutaj tworzymy aplikację WPF.
Napisz kod, aby użyć klas należących do przestrzeni nazw System.Xml. Tutaj używamy klas "XmlDocument" i "XmlNode" w następujący sposób.
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;
}
}
}
Po zbudowaniu wybierz "PreEmptive Dotfuscator and Analytics" z narzędzi w menu i uruchom go.
Dodaj utworzony plik .exe i skompiluj go.
Następnie pojawia się następujący komunikat o błędzie i kompilacja nie powiedzie się.
To nie jest moduł zarządzany (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Błąd kompilacji.
Próbowałem dowiedzieć się, co było przyczyną tego błędu, ale nie mogłem znaleźć jasnej odpowiedzi. Biorąc pod uwagę, że na angielskiej stronie nie ma informacji i że ścieżka System.Xml.dll ma "en", można się domyślić, że jest to unikalny błąd inny niż angielskie środowisko.
Obejście problemu
Mimo że projekt odwołuje się do klienta Windows System.Xml.dll, podczas kompilacji za pomocą Dotfuscator odwołuje się do zestawu w Windows Phone System.Xml.dll więc siłą skopiowaliśmy System.Xml lokalnie.dll Chciałbym uniknąć błędów kompilacji, odwołując się do niego.
Otwórz odwołania do projektu, kliknij prawym przyciskiem myszy plik System.Xml i wybierz polecenie Właściwości.
Zmień element w kopii lokalnej na True.
Podczas kompilacji w tym stanie "System.Xml.dll" jest wyprowadzany wraz z plikiem .exe.
Otwórz Dotfuscator i dodaj "System.Xml.dll" wraz z zestawem, który chcesz zaciemnić. Spowoduje to zaciemnienie zestawu, tak aby nie odwoływał się do biblioteki DLL zainstalowanej struktury i nie widział lokalnej biblioteki DLL.
Należy zauważyć, że właściwość System.Xml.dll sprawdza tryb biblioteki. Bez tego sprawdzenia System.Xml.dll może również zostać zaciemniony, a nazwy klas, do których się odwołuje, mogą ulec zmianie. Oczywiście, jeśli zmieni się nazwa klasy, nie będzie można normalnie uruchomić aplikacji.
Jeśli kompilacja w tym stanie, zakończy się pomyślnie.
Możesz być pewien, że zaciemniona aplikacja uruchamia się sama bez problemów.
Prezentowana tutaj treść jest obejściem w nieco trudny sposób, więc nie możemy zagwarantować, że będzie ona skuteczna nawet w przypadku zespołów, które zostały odpowiednio skonstruowane. Nawet jeśli kompilacja zakończy się sukcesem i można ją rozpocząć, nie można zaprzeczyć, że spadnie podczas wykonywania określonego procesu, dlatego prosimy o prawidłowe sprawdzenie operacji przed wydaniem.
Nawet jeśli nie jest to ograniczone do przestrzeni nazw System.Xml, zaciemnianie jest wrażliwą funkcją, która musi zapewnić zachowanie spójności. W szczególności, podczas korzystania z refleksji, rzeczy związane z I/O, takie jak we/wy plików i interakcja z zewnętrznymi interfejsami API, mogą zostać naruszone, więc należy zachować ostrożność.