Evite ofuscar ensamblados que usan clases en el espacio de nombres System.Xml en Dotfuscator que causarán errores

Actualización de la página :
Fecha de creación de la página :

Comprobación de los síntomas

Cree un nuevo proyecto. Puede ser Windows Form o WPF, pero aquí estamos creando una aplicación WPF.

Escriba código para usar clases que pertenezcan al espacio de nombres System.Xml. Aquí usamos las clases de "XmlDocument" y "XmlNode" de la siguiente manera.

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

Después de construir, seleccione "PreEmptive Dotfuscator and Analytics" de las herramientas en el menú y ejecútelo.

PreEmptive Dotfuscator and Analytics を起動

Agregue el archivo .exe que creó y créelo.

.exe ファイルを追加

A continuación, aparece el siguiente mensaje de error y se produce un error en la compilación.

No se trata de un módulo administrado (C:\Archivos de programa (x86)\Ensamblados de referencia\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Error de compilación.

ビルドエラー

Traté de averiguar qué estaba causando este error, pero no pude encontrar una respuesta clara. Teniendo en cuenta que no hay información en el sitio en inglés y que la ruta System.Xml.dll tiene "en", puede adivinar que es un error único que no sea el entorno en inglés.

Solución alternativa

Aunque el proyecto hace referencia al cliente de Windows System.Xml.dll, cuando se compila con Dotfuscator, hace referencia al ensamblado en Windows Phone System.Xml.dll por lo que copiamos por la fuerza el System.Xml localmente.dll Me gustaría evitar errores de compilación haciendo referencia a él.

Abra las referencias del proyecto, haga clic con el botón secundario en System.Xml y elija Propiedades.

プロパティを選択

Cambie el elemento de la copia local a True.

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

Cuando se compila en este estado, se genera "System.Xml.dll" junto con el archivo .exe.

System.Xml.dll が出力される

Abra Dotfuscator y agregue "System.Xml.dll" junto con el ensamblado que desea ofuscar. Esto ofusca el ensamblado para que no haga referencia a la DLL del marco instalado y vea la DLL local.

Tenga en cuenta que la propiedad System.Xml.dll comprueba el modo de biblioteca. Sin esta comprobación, System.Xml.dll también puede estar ofuscado y los nombres de clase a los que hace referencia pueden cambiar. Por supuesto, si el nombre de la clase cambia, no podrá iniciar la aplicación normalmente.

System.Xml.dll を追加

Si compila en este estado, se completará correctamente.

ビルド成功

Puede estar seguro de que la aplicación ofuscada se inicia por sí sola sin problemas.

アプリケーションを起動

El contenido presentado aquí es una solución alternativa de una manera algo complicada, por lo que no podemos garantizar que sea efectivo incluso para ensamblajes que se han construido en consecuencia. Incluso si la compilación es exitosa y se puede iniciar, no se puede negar la posibilidad de que se caiga al realizar un proceso específico, así que verifique la operación correctamente antes del lanzamiento.

Incluso si no se limita al espacio de nombres System.Xml, la ofuscación es una característica confidencial que debe asegurarse de que se mantenga la coherencia. En particular, cuando se usa la reflexión, es probable que las cosas relacionadas con la E/S de archivos, como la E/S de archivos y la interacción con API externas, se vean afectadas, así que tenga cuidado.