Evite conjuntos ofuscantes que usam classes no namespace System.Xml no Dotfuscator que causarão erros
Verificando os sintomas
Crie um novo projeto. Pode ser Windows Form ou WPF, mas aqui estamos criando um aplicativo WPF.
Escreva código para usar classes que pertencem ao namespace System.Xml. Aqui usamos as classes de "XmlDocument" e "XmlNode" da seguinte forma.
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;
}
}
}
Após a construção, selecione "Dotfuscator e Analytics preventivos" das ferramentas do menu e inicie-o.
Adicione o arquivo .exe que você criou e construa-o.
Em seguida, a seguinte mensagem de erro aparece e a compilação falha.
Este não é um módulo gerenciado (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Erro de compilação.
Tentei descobrir o que estava causando esse erro, mas não encontrei uma resposta clara. Considerando que não há informações no site inglês e que o caminho system.Xml.dll tem "en", você pode adivinhar que é um erro único que não seja o ambiente inglês.
Solução alternativa
Mesmo que o projeto faça referência ao Sistema cliente Windows.Xml.dll, quando você constrói com o Dotfuscator, ele faz referência ao conjunto no Sistema Windows Phone.Xml.dll então copiamos à força o System.Xml localmente.dll Eu gostaria de evitar erros de construção referindo-se a ele.
Abra as referências do projeto, clique com o botão direito do mouse em System.Xml e escolha Propriedades.
Altere o item na cópia local para True.
Quando você constrói neste estado, "System.Xml.dll" é saída juntamente com o arquivo .exe.
Abra o Dotfuscator e adicione "System.Xml.dll" junto com o conjunto que você deseja ofuscar. Isso ofusca a montagem para que não se refira ao DLL da estrutura instalada e veja o DLL local.
Observe que a propriedade System.Xml.dll verifica o modo biblioteca. Sem esta verificação, System.Xml.dll também pode ser ofuscado, e os nomes de classe que ele referências podem mudar. Claro, se o nome da classe mudar, você não poderá iniciar a aplicação normalmente.
Se você construir neste estado, ele vai completar com sucesso.
Você pode ter certeza de que o aplicativo ofuscado é lançado por conta própria sem problemas.
O conteúdo aqui apresentado é uma solução alternativa de uma forma um tanto complicada, por isso não podemos garantir que ele será eficaz mesmo para as assembleias que foram construídas em conformidade. Mesmo que a construção seja bem sucedida e possa ser iniciada, não há como negar a possibilidade de que ela caia ao realizar um processo específico, por isso verifique a operação corretamente antes da liberação.
Mesmo que não se limite ao namespace System.Xml, a ofuscação é um recurso sensível que você precisa para garantir que a consistência seja mantida. Em particular, ao usar a reflexão, coisas relacionadas à I/O, como I/O do arquivo e interação com APIs externas, provavelmente serão afetadas, por isso tenha cuidado.