Evite ofuscar ensamblados que usan clases en el espacio de nombres System.Xml en Dotfuscator que causarán errores
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;
}
}
}
Después de construir, seleccione "PreEmptive Dotfuscator and Analytics" de las herramientas en el menú y ejecútelo.
Agregue el archivo .exe que creó y créelo.
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.
Cuando se compila en este estado, se genera "System.Xml.dll" junto con el archivo .exe.
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.
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.