mirror of
https://github.com/icsharpcode/ILSpy.git
synced 2026-10-12 11:09:54 +00:00
Obfuscators put arbitrary characters into BAML strings, and XML 1.0 has no representation for most control characters - a numeric character reference is invalid for them too. Writing such a document threw ArgumentException from XmlWriter, which loses the resource on project export and shows an exception instead of the page in the UI. The escapes are spelled the way the C# output spells them, so one convention covers both languages. Namespace URIs have to be escaped where the XNamespace is created rather than in the final pass: the URI is baked into every element name built from it, so patching only the xmlns declaration would desync the two. Characters XML can carry stay untouched, so ordinary documents decompile byte-identically. Every BAML stream of an assembly lives in one .resources container, and the recovery around resource writing sat outside the loop over its entries, so a single page that could not be written discarded every other page sharing the container with it. Assisted-by: Claude:claude-opus-5:Claude Code
269 B
269 B