Izvairieties no tādu mezglu aizsegšanas, kas izmanto klases System.Xml nosaukumvietā Dotfuscator, kas radīs kļūdas
Simptomu pārbaude
Izveidojiet jaunu projektu. Tas var būt Windows forma vai WPF, bet šeit mēs veidojam WPF lietojumprogrammu.
Rakstiet kodu, lai izmantotu klases, kas pieder system.xml nosaukumvietai. Šeit mēs izmantojam "XmlDocument" un "XmlNode" klases šādi.
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;
}
}
}
Pēc izveides izvēlnē esošajos rīkos atlasiet "PreEmptive Dotfuscator and Analytics" un palaidiet to.
Pievienojiet izveidoto .exe failu un izveidojiet to.
Pēc tam tiek parādīts šāds kļūdas ziņojums, un būvējums neizdodas.
Tas nav pārvaldīts modulis (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Būvējuma kļūda.
Es mēģināju noskaidrot, kas izraisīja šo kļūdu, bet es nevarēju atrast skaidru atbildi. Ņemot vērā, ka angļu vietnē nav informācijas un ka System.Xml.dll ceļam ir "en", jūs varat uzminēt, ka tā ir unikāla kļūda, kas nav angļu vide.
Risinājums
Lai gan projektā ir atsauce uz Windows klientu System.Xml.dll, veidojot ar Dotfuscator, tas atsaucas uz montāžu Windows Phone System.Xml.dll tāpēc mēs piespiedu kārtā nokopējām System.Xml lokāli.dll Es gribētu izvairīties no būvēšanas kļūdām, atsaucoties uz to.
Atveriet projekta atsauces, ar peles labo pogu noklikšķiniet uz System.Xml un izvēlieties Rekvizīti.
Mainiet vienumu lokālajā kopijā uz Patiess.
Veidojot šādā stāvoklī, "System.Xml.dll" tiek izvadīts kopā ar .exe failu.
Atveriet Dotfuscator un pievienojiet "System.Xml.dll" kopā ar montāžu, kuru vēlaties aizsegt. Tas aptumšo montāžu tā, lai tas neattiektos uz instalētās struktūras DLL un redzētu vietējo DLL.
Ņemiet vērā, ka rekvizīts System.Xml.dll pārbauda bibliotēkas režīmu. Bez šīs pārbaudes System.Xml.dll var arī tikt apslēpts, un var mainīties klašu nosaukumi, uz kuriem tas atsaucas. Protams, ja klases nosaukums mainās, jūs nevarēsit normāli sākt pieteikumu.
Ja jūs veidojat šajā stāvoklī, tas tiks veiksmīgi pabeigts.
Jūs varat būt pārliecināti, ka apslēptā lietojumprogramma tiek palaista pati bez problēmām.
Šeit izklāstītais saturs ir nedaudz sarežģīts risinājums, tāpēc mēs nevaram garantēt, ka tas būs efektīvs pat attiecībā uz komplektiem, kas ir attiecīgi uzbūvēti. Pat ja būvēšana ir veiksmīga un to var sākt, nevar noliegt iespēju, ka tā samazināsies, veicot konkrētu procesu, tāpēc, lūdzu, pirms izlaišanas pārbaudiet darbību pareizi.
Pat ja tas neaprobežojas tikai ar System.Xml nosaukumvietu, aizklāšana ir jutīgs līdzeklis, kas jums nepieciešams, lai pārliecinātos, ka konsekvence tiek saglabāta. Jo īpaši, izmantojot pārdomas, iespējams, tiks ietekmētas ar I/O saistītas lietas, piemēram, faila I/O un mijiedarbība ar ārējām API, tāpēc esiet piesardzīgs.