اجتناب از مجامع مبهم که استفاده از کلاس ها در System.Xml فضای نام در Dotfuscator که باعث خطا

صفحه به روز شده :
تاریخ ایجاد صفحه :

بررسی علائم

یک پروژه جدید ایجاد کنید. این می تواند فرم ویندوز یا WPF، اما در اینجا ما در حال ایجاد یک برنامه WPF.

نوشتن کد برای استفاده از کلاس هایی که متعلق به سیستم.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 名前空間のクラスを使用したコード

پس از ساخت، "PreEmptive Dotfuscator and Analytics" را از ابزارها در منو انتخاب کنید و آن را راه اندازی کنید.

PreEmptive Dotfuscator and Analytics を起動

اضافه کردن فایل .exe که ایجاد کرده اید و آن را بسازید.

.exe ファイルを追加

سپس پیام خطای زیر ظاهر می شود و ساخت با شکست مواجه می شود.

این یک ماژول مدیریت شده (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll) نیست. ایجاد خطا.

ビルドエラー

سعی کردم بفهمم چه چیزی باعث این خطا می شود اما نتوانستم پاسخ روشنی پیدا کنم. با توجه به اینکه هیچ اطلاعاتی در سایت انگلیسی وجود ندارد و مسیر System.Xml.dll دارای "en" است، می توانید حدس بزنید که خطای منحصر به فردی غیر از محیط انگلیسی است.

راهحل

حتی اگر این پروژه مرجع ویندوز مشتری System.Xml.dll، هنگامی که شما با Dotfuscator ساخت، آن را مرجع مونتاژ در سیستم ویندوز فون.Xml.dll بنابراین ما به زور کپی سیستم.Xml محلی.dll من می خواهم برای جلوگیری از ایجاد خطا با اشاره به آن.

منابع پروژه را باز کنید، روی System.Xml کلیک راست کنید و Properties را انتخاب کنید.

プロパティを選択

مورد را در کپی محلی به True تغییر دهید.

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

هنگامی که شما در این حالت ساخت، "System.Xml.dll خروجی همراه با فایل .exe است.

System.Xml.dll が出力される

Dotfuscator را باز کنید و "System.Xml.dll" را به همراه مونتاژی که می خواهید مبهم کنید اضافه کنید. این مونتاژ را مبهم می کند به طوری که به DLL چارچوب نصب شده اشاره نمی کند و DLL محلی را می بیند.

توجه داشته باشید که سیستم.Xml.dll حالت کتابخانه را بررسی می کند. بدون این چک، سیستم.Xml.dll ممکن است مبهم باشد، و نام کلاسی که ارجاع می دهد ممکن است تغییر کند. البته در صورت تغییر نام کلاس، شما قادر به شروع برنامه به طور معمول نخواهد بود.

System.Xml.dll を追加

اگر در این حالت بسازید، با موفقیت کامل خواهد شد.

ビルド成功

شما می توانید مطمئن باشید که برنامه مبهم راه اندازی شد خود را بدون مشکل.

アプリケーションを起動

محتوای ارائه شده در اینجا یک راه کار به شیوه ای تا حدودی حیله و تزویر است، بنابراین ما نمی توانیم تضمین کنیم که حتی برای مجامعی که بر این اساس ساخته شده اند، موثر خواهد بود. حتی اگر ساخت موفق است و می تواند آغاز شده است، هیچ انکار احتمال سقوط آن در هنگام انجام یک فرایند خاص وجود دارد، بنابراین لطفا بررسی عملیات به درستی قبل از انتشار.

حتی اگر آن را به سیستم.Xml فضای نام محدود نیست، مبهم کردن یک ویژگی حساس است که شما نیاز به اطمینان حاصل کنید که قوام حفظ شده است. به طور خاص، در هنگام استفاده از بازتاب، I/O چیزهای مرتبط مانند فایل I/O و تعامل با APIs خارجی به احتمال زیاد تحت تاثیر قرار می شوند، بنابراین مراقب باشید.