Reflector 9.3 has been released

Russell DRussell D Posts: 313 Gold 1
edited November 23, 2017 9:41AM in .NET Reflector
This contains support for the following C# 7.0 features:
  • Tuples
  • Out variables
  • Pattern Matching
  • Deconstruction
  • Discards
  • Literals
  • Throw Expressions

These are considered beta functionality at present - please let us know if you have any issues.

  • RP-4058 - (VsPackage): on F12 Jump, find proper declaration based on metadata line

You can download this through Check for Updates or from here:

Visual Studio 2017 users will need to install (or update) through the Visual Studio gallery.


  • RichardDRichardD Posts: 50 Bronze 3
    The new installer is much better. :)

    However, the "Welcome to" popup when launching the new version now displays a "mixed content" warning:

  • Thanks for the feedback @RichardD - and I'll look into the welcome page to see if we can do anything about it.
  • This should be fixed in the next release.
  • Since upgrading to version 9.3, the tooltips for all attributes in the disassembly view report the type as `Reflector.Application.Languages.CSharpLanguage+LanguageWriter+Context` instead of the actual selected attribute. Here's a screenshot:

  • Thanks, I've raised a bug and will investigate..
  • Ok this has been fixed and will go out in the new release, which will be early in the new year.
  • DJ DoenaDJ Doena Posts: 13 Bronze 2
    I've tried out the new named tuple feature in C#7 and when I reflect on it, I get the following error:

    at Reflector.Disassembler.Helper.HiddenAttributesCollection.ParseVersion(String version)
    at Reflector.Disassembler.Helper.HiddenAttributesCollection.<>c.<CreateInstance>b__0_1(Dictionary`2 dict, ICustomAttributeCollection attributes, String version)
    at Reflector.Disassembler.Helper.HiddenAttributesCollection.HelpC`2.Filter(ICustomAttributeCollection attributes, String version)
    at Reflector.Disassembler.Helper.FilterIrrelevant(ICustomAttributeCollection attributes, String version)
    at Reflector.Application.Languages.CSharpLanguage.LanguageWriter.WriteCustomAttributeList(ICustomAttributeProvider value, IFormatter formatter, String target, HashSet`1 hide)
    at Reflector.Application.Languages.CSharpLanguage.LanguageWriter.WriteMethodDeclaration(IMethodDeclaration value)
    at Reflector.Application.UserInterface.DisassemblerWindow.Render(Boolean expandTypes, Boolean expandMethods)
  • @DJ Doena I'm struggling to reproduce this, can you share your reproduction?
  • DJ DoenaDJ Doena Posts: 13 Bronze 2
    Hi, (un)fortunately no more repro. I've cleared my entire assembly list on the left and then only loaded my new assembly. Now the error is gone. It could have been an assembly that was in the list but didn't exist on the harddrive anymore? Not sure because there were about a dozen assemblies in the list, sorry.
  • No apology necessary, if you do ever see it again just let us know and we'll investigate.
  • DJ DoenaDJ Doena Posts: 13 Bronze 2
    edited January 4, 2018 11:43AM
    I have another one

    Invalid expression stack size during null coalescing expression translation.
    at Reflector.Disassembler.Translator.DecodeNullCoalescingExpressionOrStatement()
    at Reflector.Disassembler.Translator.DecodeDuplicateStatement(Int32 offset)
    at Reflector.Disassembler.Translator.DecodeStatement(Int32 end)
    at Reflector.Disassembler.Translator.DecodeBlockStatement(Int32 offset, Int32 end)
    at Reflector.Disassembler.Translator.TranslateMethodDeclaration(IMethodDeclaration mD, IMethodBody mB, Boolean handleExpressionStack)
    at Reflector.Disassembler.Translator.TranslateMethodDeclaration(IMethodDeclaration mD, IMethodBody mB)
    at Reflector.Disassembler.Disassembler.TransformMethodDeclaration(IMethodDeclaration value)
    at Reflector.Application.Translator.TranslateMethodDeclaration(IMethodDeclaration value)
    at Reflector.Application.UserInterface.DisassemblerWindow.Render(Boolean expandTypes, Boolean expandMethods)

    The actual code of that method is


    bool UserIsCorrectAndContainsDate(User user) => user?.UserName == "DJ Doena" && user?.Watches?.Any(WatchesContainsDate) == true;

    PS: this throws the same error
    bool EntryContainsUserWithWatchedDate(FileEntry entry) => entry?.Users?.Any(UserIsCorrectAndContainsDate) == true;
Sign In or Register to comment.