Venkite užmaskuoti rinkinius, kurie naudoja klases System.Xml vardų srityje Dotfuscator, kurie sukels klaidų
Simptomų tikrinimas
Sukurkite naują projektą. Tai gali būti "Windows Form" arba WPF, bet čia mes kuriame WPF programą.
Parašykite kodą, kad naudotumėte klases, priklausančias System.Xml vardų sričiai. Čia mes naudojame "XmlDocument" ir "XmlNode" klases taip.
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;
}
}
}
Sukūrę meniu įrankius pasirinkite "PreEmptive Dotfuscator and Analytics" ir paleiskite jį.
Įtraukite .exe sukurtą failą ir sukurkite jį.
Tada pasirodo šis klaidos pranešimas ir kūrimas nepavyksta.
Tai nėra valdomas modulis (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Kūrimo klaida.
Bandžiau išsiaiškinti, kas sukėlė šią klaidą, bet neradau aiškaus atsakymo. Atsižvelgiant į tai, kad angliškoje svetainėje nėra informacijos ir kad System.Xml.dll kelias turi "en", galite atspėti, kad tai yra unikali klaida, išskyrus anglišką aplinką.
Sprendimo būdas
Nors projektas nurodo "Windows" klientą System.Xml.dll, kai kuriate naudodami "Dotfuscator", jis nurodo surinkimą "Windows Phone System.Xml.dll todėl priverstinai nukopijavome System.Xml vietoje.dll Norėčiau išvengti kūrimo klaidų, nurodydamas tai.
Atidarykite projekto nuorodas, dešiniuoju pelės mygtuku spustelėkite System.Xml ir pasirinkite Ypatybės.
Pakeiskite vietinės kopijos elementą į True.
Kai kuriate šią būseną, "System.Xml.dll" išvedama kartu su .exe failu.
Atidarykite "Dotfuscator" ir pridėkite "System.Xml.dll" kartu su mazgu, kurį norite užmaskuoti. Tai užmaskuoja surinkimą taip, kad jis nebūtų susijęs su įdiegtu sistemos DLL ir matytų vietinį DLL.
Atkreipkite dėmesį, kad ypatybė System.Xml.dll tikrina bibliotekos režimą. Be šio patikrinimo System.Xml.dll taip pat gali būti užmaskuotas, o jo nurodyti klasių pavadinimai gali keistis. Žinoma, jei klasės pavadinimas pasikeis, negalėsite normaliai paleisti programos.
Jei statote šioje būsenoje, jis bus sėkmingai baigtas.
Galite būti tikri, kad užmaskuota programa paleidžiama savaime be problemų.
Čia pateiktas turinys yra šiek tiek keblus sprendimas, todėl negalime garantuoti, kad jis bus veiksmingas net ir atitinkamai sukonstruotiems agregatams. Net jei kūrimas yra sėkmingas ir gali būti pradėtas, negalima paneigti galimybės, kad jis kris atliekant konkretų procesą, todėl prieš išleidžiant tinkamai patikrinkite operaciją.
Net jei tai neapsiriboja System.Xml vardų sritimi, užmaskavimas yra jautri funkcija, kurios reikia norint užtikrinti, kad būtų išlaikytas nuoseklumas. Visų pirma, naudojant refleksiją, gali būti paveikti su įvesties / išvesties funkcija susiję dalykai, tokie kaip failų įvesties / išvesties funkcija ir sąveika su išorinėmis API, todėl būkite atsargūs.