mirror of https://github.com/icsharpcode/ILSpy.git
Branch:
master
christophwille/closedhierarchies
christophwille/membench
compound-assignment-operators
fix/1982-params-attribute-args
fix/2040-invalid-xml-characters
fix/2093-navigateto-reference-assembly
fix/2362-xalz-references
fix/2372-address-taken-by
fix/3282-indexer-optional-arguments
fix/3568-record-member-order
fix/4059-deconstruct-out-slots
fix/lambda-parameter-syntax
fix/scroll-children-on-expand
gh-pages
ldmembertoken
master
natural-type-lambdas-methods
null-coalescing-assignment
release/10.1
release/6.2
release/7.1
release/7.2
release/8.1
substring-optimizations
tests/829-async-method-builder-override
tests/829-collection-expressions
tests/829-compound-assignment-operators
tests/829-coverage-audit
tests/829-expression-tree-named-optional-args
tests/829-expression-variables-in-initializers
tests/829-extended-property-patterns
tests/829-extension-members
tests/829-extension-operators
tests/829-file-local-types
tests/829-improved-definite-assignment
tests/829-improved-overload-candidates
tests/829-inline-arrays
tests/829-interpolated-string-improvements
tests/829-lambda-param-modifiers
tests/829-list-patterns
tests/829-lock-object
tests/829-mixed-deconstruction
tests/829-null-coalescing-assignment
tests/829-null-conditional-assignment
tests/829-object-initializer-indexer
tests/829-overload-resolution-priority
tests/829-params-collections
tests/829-pattern-matching-improvements
tests/829-primary-constructors
tests/829-ref-unsafe-in-iterators-async
tests/829-sealed-record-tostring
tests/829-target-typed-conditional
tests/829-tuple-comparison
win-a11y-textsize
1.0-Beta
1.0-M1
1.0-M2
1.0-M3
1.0.0
2.0.0
2.1
2.2
2.3
2.3.1
3.0-Preview1
3.0-Preview2
3.0.2
v10.0
v10.0-preview1
v10.0-preview2
v10.0-preview3
v10.0.1
v10.1
v10.1.1
v11.0
v11.0-preview1
v11.0-rc
v2.3.2
v2.4
v3.0
v3.0-beta1
v3.0-beta2
v3.0-beta2a
v3.0-beta3
v3.0-beta4
v3.0.1
v3.1-beta1
v3.1-final
v3.1-rc
v3.2-beta
v3.2-rc
v3.2.0
v4.0
v4.0-alpha1
v4.0-beta1
v4.0-beta2
v4.0-beta3
v4.0-rc1
v4.0-rc2
v4.0.1
v5.0
v5.0-preview1
v5.0-preview2
v5.0-preview3
v5.0-preview4
v5.0-rc1
v5.0.1
v5.0.2
v6.0
v6.0-preview1
v6.0-preview2
v6.0-preview3
v6.0-preview4
v6.0-rc1
v6.1
v6.2
v6.2-preview1
v6.2-preview2
v6.2.1
v7.0
v7.0-preview1
v7.0-preview2
v7.0-preview3
v7.0-rc1
v7.0-rc2
v7.1
v7.2
v7.2-preview1
v7.2-preview2
v7.2-preview3
v7.2-preview4
v7.2-rc
v7.2.1
v8.0
v8.0-preview1
v8.0-preview2
v8.0-preview3
v8.0-preview4
v8.0-rc1
v8.1
v8.1.1
v8.2
v9.0
v9.0-preview1
v9.0-preview2
v9.0-preview3
v9.0-rc
v9.1
${ noResults }
5 Commits (master)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
d8dfbec04b |
Write XAML a XAML parser can read back
Two of the defects reported on issue #2253 come from the decompiler writing text that means something else when it is read again. A markup extension is written as a single attribute value, and its grammar gives ',' '=' '{' '}' and the quote characters a meaning. Values went out unquoted, so an argument carrying any of them was read back as further name/value pairs: {DXBinding Expr='Price - Prev > 0 ? ...'}, the reported case, no longer compiles at all (MC3042, MC3045). Values without such a character stay unquoted, because quoting them would rewrite every document that never needed it. A clr-namespace declaration names the CLR namespace it maps, but nothing read that name out of it, so no lookup by namespace could match a declaration the document itself had made. Every type in such a namespace then got a second prefix declared on the element that used it. The assembly is the second half of the same lookup, and there the document records the name it was written against while a well-known type carries the assembly it resolves to now - "mscorlib" against "System.Private.CoreLib" - so the two are also accepted as the same when the recorded assembly forwards the type. Assisted-by: Claude:claude-opus-5:Claude Code |
2 weeks ago |
|
|
bb1d830ee6 |
Fix #2040: escape BAML strings that XML cannot represent
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 |
2 weeks ago |
|
|
f1bc6ab542 |
Fix #1688: resolve elements to the XML namespace the document declares
An assembly can map one CLR namespace to several XML namespaces: PresentationFramework maps its namespaces to both the winfx/2006 and the netfx/2007 presentation namespace. The fallback used when the BAML xmlns records name no namespace for a type always preferred the winfx/2006 one, so a document that binds the default prefix to netfx/2007 ended up with a root start tag that declares one presentation namespace and needs the other for its own name, which XmlWriter rejects. Only the root carries the xmlns declaration, which is why skipping XClassRewritePass worked around it. Assisted-by: Claude:claude-opus-5:Claude Code |
2 weeks ago |
|
|
e1e16b64f5 |
dev: Strip BOM mark from text files
|
1 year ago |
|
|
7c259a8895 |
Split Baml Addin into library & addin projects
|
3 years ago |