Unikaj zaciemniania zestawów, które używają klas w przestrzeni nazw System.Xml w Dotfuscator, które powodują błędy

Strona zaktualizowana :
Data utworzenia strony :

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;
    }
  }
}

System.Xml 名前空間のクラスを使用したコード

Po zbudowaniu wybierz "PreEmptive Dotfuscator and Analytics" z narzędzi w menu i uruchom go.

PreEmptive Dotfuscator and Analytics を起動

Dodaj utworzony plik .exe i skompiluj go.

.exe ファイルを追加

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.

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

Podczas kompilacji w tym stanie "System.Xml.dll" jest wyprowadzany wraz z plikiem .exe.

System.Xml.dll が出力される

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.

System.Xml.dll を追加

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ść.