डॉटफ़ुस्केटर में सिस्टम.Xml नामस्थान में कक्षाओं का उपयोग करने वाली असेंबली को अस्पष्ट करने से बचें जो त्रुटियों का कारण होगा

पेज अद्यतन :
पेज निर्माण की तारीख :

लक्षणों की जाँच करना

कोई नया प्रोजेक्ट बनाएँ. यह विंडोज फॉर्म या डब्ल्यूपीएफ हो सकता है, लेकिन यहां हम एक डब्ल्यूपीएफ एप्लिकेशन बना रहे हैं।

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

निर्माण के बाद, मेनू में उपकरणों से "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" है, आप अनुमान लगा सकते हैं कि यह अंग्रेजी वातावरण के अलावा एक अद्वितीय त्रुटि है।

समाधान

भले ही प्रोजेक्ट 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" जोड़ें जिसे आप obfuscate करना चाहते हैं। यह असेंबली obfuscates ताकि यह स्थापित फ्रेमवर्क के DLL को संदर्भित नहीं करता है और स्थानीय DLL को देखता है।

ध्यान दें कि System.Xml.dll गुण लायब्रेरी मोड की जाँच करता है। इस जाँच के बिना, System.Xml.dll भी obfuscated हो सकता है, और यह संदर्भित वर्ग नाम परिवर्तित हो सकता है। बेशक, यदि कक्षा का नाम बदलता है, तो आप सामान्य रूप से एप्लिकेशन शुरू करने में सक्षम नहीं होंगे।

System.Xml.dll を追加

यदि आप इस स्थिति में निर्माण करते हैं, तो यह सफलतापूर्वक पूरा हो जाएगा।

ビルド成功

आप सुनिश्चित कर सकते हैं कि obfuscated आवेदन समस्याओं के बिना अपने दम पर शुरू होता है।

アプリケーションを起動

यहां प्रस्तुत सामग्री कुछ हद तक मुश्किल तरीके से एक वर्कअराउंड है, इसलिए हम गारंटी नहीं दे सकते हैं कि यह उन विधानसभाओं के लिए भी प्रभावी होगा जो तदनुसार बनाए गए हैं। यहां तक कि अगर निर्माण सफल है और शुरू किया जा सकता है, तो इस संभावना से इनकार नहीं किया जा सकता है कि यह एक विशिष्ट प्रक्रिया करते समय गिर जाएगा, इसलिए कृपया रिलीज से पहले ऑपरेशन को ठीक से जांचें।

यहां तक कि अगर यह System.Xml नामस्थान तक सीमित नहीं है, तो obfuscation एक संवेदनशील सुविधा है जिसे आपको यह सुनिश्चित करने की आवश्यकता है कि संगतता बनाए रखी गई है। विशेष रूप से, प्रतिबिंब का उपयोग करते समय, आई / ओ से संबंधित चीजें जैसे फ़ाइल आई / ओ और बाहरी एपीआई के साथ बातचीत प्रभावित होने की संभावना है, इसलिए सावधान रहें।