اجتناب از مجامع مبهم که استفاده از کلاس ها در 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;
}
}
}
پس از ساخت، "PreEmptive Dotfuscator and Analytics" را از ابزارها در منو انتخاب کنید و آن را راه اندازی کنید.
اضافه کردن فایل .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 تغییر دهید.
هنگامی که شما در این حالت ساخت، "System.Xml.dll خروجی همراه با فایل .exe است.
Dotfuscator را باز کنید و "System.Xml.dll" را به همراه مونتاژی که می خواهید مبهم کنید اضافه کنید. این مونتاژ را مبهم می کند به طوری که به DLL چارچوب نصب شده اشاره نمی کند و DLL محلی را می بیند.
توجه داشته باشید که سیستم.Xml.dll حالت کتابخانه را بررسی می کند. بدون این چک، سیستم.Xml.dll ممکن است مبهم باشد، و نام کلاسی که ارجاع می دهد ممکن است تغییر کند. البته در صورت تغییر نام کلاس، شما قادر به شروع برنامه به طور معمول نخواهد بود.
اگر در این حالت بسازید، با موفقیت کامل خواهد شد.
شما می توانید مطمئن باشید که برنامه مبهم راه اندازی شد خود را بدون مشکل.
محتوای ارائه شده در اینجا یک راه کار به شیوه ای تا حدودی حیله و تزویر است، بنابراین ما نمی توانیم تضمین کنیم که حتی برای مجامعی که بر این اساس ساخته شده اند، موثر خواهد بود. حتی اگر ساخت موفق است و می تواند آغاز شده است، هیچ انکار احتمال سقوط آن در هنگام انجام یک فرایند خاص وجود دارد، بنابراین لطفا بررسی عملیات به درستی قبل از انتشار.
حتی اگر آن را به سیستم.Xml فضای نام محدود نیست، مبهم کردن یک ویژگی حساس است که شما نیاز به اطمینان حاصل کنید که قوام حفظ شده است. به طور خاص، در هنگام استفاده از بازتاب، I/O چیزهای مرتبط مانند فایل I/O و تعامل با APIs خارجی به احتمال زیاد تحت تاثیر قرار می شوند، بنابراین مراقب باشید.