Vältä hämärtämästä kokoonpanoja, jotka käyttävät luokkia System.Xml-nimiavaruudessa Dotfuscatorissa ja jotka aiheuttavat virheitä
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;
}
}
}
Kun olet rakentanut, valitse valikon työkaluista "PreEmptive Dotfuscator and Analytics" ja käynnistä se.
Lisää luomasi .exe tiedosto ja luo se.
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.
Kun luot tähän tilaan, "System.Xml.dll" tulostetaan yhdessä .exe-tiedoston kanssa.
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.
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.