오류를 발생시키는 Dotfuscator의 System.Xml 네임스페이스에 있는 클래스를 사용하는 어셈블리를 난독 처리하지 마십시오.

페이지 업데이트 :
페이지 생성 날짜 :

증상 확인

새 프로젝트를 만듭니다. Windows Form 또는 WPF 일 수 있지만 여기서는 WPF 응용 프로그램을 만들고 있습니다.

System.Xml 네임스페이스에 속하는 클래스를 사용하는 코드를 작성합니다. 여기서는 다음과 같이 "XmlDocument"및 "XmlNode"클래스를 사용합니다.

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

빌드 후 메뉴의 도구에서 "선점 Dotfuscator 및 분석"을 선택하고 실행하십시오.

PreEmptive Dotfuscator and Analytics を起動

만든 .exe 파일을 추가하고 빌드합니다.

.exe ファイルを追加

그런 다음 다음 오류 메시지가 나타나고 빌드가 실패합니다.

이것은 관리되는 모듈이 아닙니다(C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). 빌드 오류입니다.

ビルドエラー

이 오류의 원인을 찾으려고했지만 명확한 답을 찾을 수 없었습니다. 영어 사이트에 정보가 없고 System.Xml.dll 경로에 "en"이 있으면 영어 환경 이외의 고유한 오류임을 추측할 수 있습니다.

해결 방법

프로젝트가 Windows 클라이언트 System.Xml.dll을 참조하더라도 Dotfuscator를 사용하여 빌드할 때 Windows Phone System.Xml.dll의 어셈블리를 참조하므로 System.Xml을 로컬로 강제로 복사했.dll 나는 그것을 참조하여 빌드 오류를 피하고 싶다.

프로젝트의 참조를 열고 System.Xml을 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.

プロパティを選択

로컬 복사본의 항목을 True로 변경합니다.

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

이 상태에서 빌드하면 "System.Xml.dll"이 .exe 파일과 함께 출력됩니다.

System.Xml.dll が出力される

Dotfuscator를 열고 난독 화하려는 어셈블리와 함께 "System.Xml.dll"을 추가하십시오. 이렇게하면 어셈블리가 설치된 프레임 워크의 DLL을 참조하지 않고 로컬 DLL을 볼 수 있도록 어셈블리를 난독 화합니다.

System.Xml.dll 속성은 라이브러리 모드를 확인합니다. 이 검사가 없으면 System.Xml.dll도 난독 화될 수 있으며 참조하는 클래스 이름이 변경될 수 있습니다. 물론 클래스 이름이 변경되면 응용 프로그램을 정상적으로 시작할 수 없습니다.

System.Xml.dll を追加

이 상태에서 빌드하면 성공적으로 완료됩니다.

ビルド成功

난독 화 된 응용 프로그램이 문제없이 자체적으로 시작되는지 확인할 수 있습니다.

アプリケーションを起動

여기에 제시된 내용은 다소 까다로운 방식으로 해결 방법이므로 그에 따라 구성된 어셈블리에도 효과적이라고 보장 할 수는 없습니다. 빌드가 성공하고 시작할 수 있다고해도 특정 프로세스를 수행 할 때 떨어질 가능성이 있음을 부인할 수 없으므로 릴리스 전에 작업을 올바르게 확인하십시오.

System.Xml 네임스페이스로 제한되지 않더라도 난독화는 일관성을 유지하는 데 필요한 중요한 기능입니다. 특히 리플렉션을 사용할 때는 파일 I/O 및 외부 API와의 상호 작용과 같은 I/O 관련 요소가 영향을 받을 수 있으므로 주의해야 합니다.