Vältä hämärtämästä kokoonpanoja, jotka käyttävät luokkia System.Xml-nimiavaruudessa Dotfuscatorissa ja jotka aiheuttavat virheitä

Sivu päivitetty :
Sivun luontipäivämäärä :

Oireiden tarkistaminen

Luo uusi projekti. Se voi olla Windows Form tai WPF, mutta tässä luomme WPF-sovelluksen.

Kirjoita koodi, jos haluat käyttää luokkia, jotka kuuluvat System.Xml-nimitilaan. Tässä käytämme luokkia "XmlDocument" ja "XmlNode" seuraavasti.

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

Kun olet rakentanut, valitse valikon työkaluista "PreEmptive Dotfuscator and Analytics" ja käynnistä se.

PreEmptive Dotfuscator and Analytics を起動

Lisää luomasi .exe tiedosto ja luo se.

.exe ファイルを追加

Sitten näyttöön tulee seuraava virhesanoma ja koontiversio epäonnistuu.

Tämä ei ole hallittu moduuli (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Rakenna virhe.

ビルドエラー

Yritin selvittää, mikä aiheutti tämän virheen, mutta en löytänyt selkeää vastausta. Ottaen huomioon, että englanninkielisellä sivustolla ei ole tietoa ja että System.Xml.dll-polulla on "en", voit arvata, että se on ainutlaatuinen virhe, joka on muu kuin englanninkielinen ympäristö.

Vaihtoehtoinen menetelmä

Vaikka projekti viittaa Windows-asiakasohjelman System.Xml.dll, kun rakennat Dotfuscatorilla, se viittaa Windows Phone System.Xml.dll joten kopioimme System.Xml:n väkisin paikallisesti.dll Haluaisin välttää rakennusvirheitä viittaamalla siihen.

Avaa projektin viitteet, napsauta system.xml-tiedostoa hiiren kakkospainikkeella ja valitse Ominaisuudet.

プロパティを選択

Muuta paikallisen kopion kohteen arvoksi Tosi.

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

Kun luot tähän tilaan, "System.Xml.dll" tulostetaan yhdessä .exe-tiedoston kanssa.

System.Xml.dll が出力される

Avaa Dotfuscator ja lisää "System.Xml.dll" sekä kokoonpano, jonka haluat hämärtää. Tämä hämärtää kokoonpanon niin, että se ei viittaa asennetun kehyksen DLL:ään ja näkee paikallisen DLL:n.

Huomaa, että System.Xml.dll-ominaisuus tarkistaa kirjastotilan. Ilman tätä tarkistusta System.Xml.dll voidaan myös hämärtyä, ja luokkien nimet, joihin se viittaa, voivat muuttua. Tietenkin, jos luokan nimi muuttuu, et voi käynnistää sovellusta normaalisti.

System.Xml.dll を追加

Jos rakennat tähän tilaan, se valmistuu onnistuneesti.

ビルド成功

Voit olla varma, että obfuskoitu sovellus käynnistyy itsestään ilman ongelmia.

アプリケーションを起動

Tässä esitetty sisältö on kiertotapa hieman hankalalla tavalla, joten emme voi taata, että se on tehokas myös sen mukaisesti rakennetuissa kokoonpanoissa. Vaikka rakennus onnistuisi ja se voidaan käynnistää, ei voida kiistää mahdollisuutta, että se putoaa suorittaessaan tiettyä prosessia, joten tarkista toiminto kunnolla ennen julkaisua.

Vaikka se ei rajoittuisi System.Xml-nimiavaruuteen, hämärtyminen on herkkä ominaisuus, joka sinun on varmistettava, että johdonmukaisuus säilyy. Erityisesti, kun käytät heijastusta, se vaikuttaa todennäköisesti I /O-tiedostoon liittyviin asioihin, kuten tiedostoon I /O ja vuorovaikutukseen ulkoisten ohjelmointirajapintojen kanssa, joten ole varovainen.