Evite conjuntos ofuscantes que usam classes no namespace System.Xml no Dotfuscator que causarão erros

Página atualizada :
Data de criação de página :

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

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

Após a construção, selecione "Dotfuscator e Analytics preventivos" das ferramentas do menu e inicie-o.

PreEmptive Dotfuscator and Analytics を起動

Adicione o arquivo .exe que você criou e construa-o.

.exe ファイルを追加

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.

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

Quando você constrói neste estado, "System.Xml.dll" é saída juntamente com o arquivo .exe.

System.Xml.dll が出力される

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.

System.Xml.dll を追加

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.