SharpDevelop Community

Get your problems solved!
Welcome to SharpDevelop Community Sign in | Join | Help
in Search

Christoph Wille

  • Async Targeting Pack in SharpDevelop 4.2 (and later)

    Microsoft has released the Async Targeting Pack for Visual Studio 11, which is also available as a NuGet package - and thus available in SharpDevelop. What does this Targeting Pack do? It allows you to use the async / await constructs in your pre-.NET 4.5 application.

    Take the following application project:

    It comes up with a couple of errors that wouldn't show if I had been targeting .NET 4.5. So how to fix this? NuGet to the rescue:

    Search for the Microsoft.CompilerServices.AsyncTargetingPack from the Manage Packages dialog (don't forget to click Add!):

    Now your project will build and run nicely - note the new assembly reference (Microsoft.CompilerServices.AsyncTargetingPack.Net4) and NuGet configuration (packages.config):

    One important caveat though: You must have .NET 4.5 installed on your development machine and set the project to build using the C# 5.0 compiler!

  • ILSpy 2.0 Final

    Today, we released ILSpy 2.0 final to the Web:

    ILSpy_Master_2.0.0.1595_RTW_Binaries.zip
    ILSpy_Master_2.0.0.1595_RTW_Source.zip

    Daniel's Beta feature post still applies to the release version:

    • Assembly Lists
    • Support for decompiling Expression trees
    • Support for lifted operatores on nullables
    • Decompile to Visual Basic
    • Search for multiple strings separated by space (searching for "Assembly manager" in ILSpy.exe would find AssemblyListManager)
    • Clicking on a local variable will highlight all other occurrences of that variable
    • Ctrl+F can be used to search within the decompiled code view

    However, one thing changed for the binaries distribution: we do not include the debugger addin by default (it is part of the source download). The reason is that it is not stable enough - we´re improving the debugger in SharpDevelop and don´t have the resources to port those changes over to ILSpy just yet.

  • SharpDevelop Platform Roadmap

    We have waited till the Beta phase of .NET Framework 4.5 to finally decide on our platform story - what will be supported and what will be required.

    SharpDevelop 4.x

    It will continue to require .NET 4.0 as its runtime, but it will also run on .NET 4.5 (if you upgraded your machine). It supports (as compilation targets) 2.0 to 4.5 - if those frameworks are installed on your machine.

    We are currently wrapping up feature development for 4.2, and we have plans for a further feature release 4.3. After that, the current plans are for servicing releases that update dependencies and/or fix bugs. Given those plans, expect 4.x releases for at least a year to come.

    SharpDevelop 5 "Zimnitz"

    This has been in development for some time already, and you have seen "offsprings" like ILSpy or Code Quality Analysis in SharpDevelop 4.2 to "prove" that our new NRefactory (*) is up to the job. Given that all IDE services need to be adapted to the new infrastructure, we will also take advantage of features in .NET 4.5, thus upping the requirements of SharpDevelop.

    However, this means for a considerable part of our current user base to start planning for the future - because .NET 4.5 will likely not support XP (maybe not even Vista). Betas of SD5 will start showing up later this year.

    Although the requirements change, the support of frameworks stays the same. (you will only have to install a newer OS on your development machine, deployment is unaffected)

    * NRefactory 5 is developed together with the MonoDevelop team, and will support features such as semantic highlighting or more (sophisticated) refactorings.

  • Soon on Your Computer - SD 4.2 Beta 2

    With support for .NET 4.5, and yes, it does run on Windows 8 Consumer Preview too:

  • Decompilation of Object / Collection Initializers with ILSpy

    If you test a method like the following:

            static void TestWithUnusedVariables()
            {
                var x = new Demo()
                {
                    SomeProperty = "Hello World"
                };
     
                var y = new List<Demo>
                {
                    new Demo() {
                        SomeProperty = "nada"
                        },
                    new Demo()
                        {
                            SomeProperty = "nix"
                        }
                };
            }

    And decompile with ILSpy you might be thinking that object / collection intializers are not being detected:

    private static void TestWithUnusedVariables()
    {
        Demo demo = new Demo();
        demo.SomeProperty = "Hello World";
        List<Demo> list = new List<Demo>();
        list.Add(new Demo
        {
            SomeProperty = "nada"
        });
        list.Add(new Demo
        {
            SomeProperty = "nix"
        });
    }

    Well, you are right. The reason being that the compilers sees that my user variables are not being used, thus optimizing the code by only keeping the compiler-generated ones, thus making it impossible for us to correctly detect the initializer.

    However, if you use the variables

            static void TestWithUsedVariables()
            {
                var x = new Demo()
                {
                    SomeProperty = "Hello World"
                };
     
                var y = new List<Demo>
                {
                    new Demo() {
                        SomeProperty = "nada"
                        },
                    new Demo()
                        {
                            SomeProperty = "nix"
                        }
                };
     
                x.SomeProperty = "noch was";
                var z = y.Count();
            }

    ILSpy will correctly come up with proper decompiled code:

    private static void TestWithUsedVariables()
    {
        Demo x = new Demo
        {
            SomeProperty = "Hello World"
        };
        List<Demo> y = new List<Demo>
        {
            new Demo
            {
                SomeProperty = "nada"
            }, 
            new Demo
            {
                SomeProperty = "nix"
            }
        };
        x.SomeProperty = "noch was";
        int z = y.Count<Demo>();
    }

    In the sense of a "variable being used" the decompilation also works for variables only used to pass back a value:

            static Demo TestWithReturnValue()
            {
                return new Demo()
                    {
                        SomeProperty = "Hello World"
                    };
            }

    ILSpy output:

    private static Demo TestWithReturnValue()
    {
        return new Demo
        {
            SomeProperty = "Hello World"
        };
    }

    Bottom line: object and collection initializers are being properly decompiled if we can ascertain that it actually is one.

  • Code Completion Trimming in SharpDevelop 4.2

    As mentioned in the release notes for SharpDevelop 4.1, it doesn't display the correct code completion information if you have the .NET 4.5 preview bits on your machine too. Starting with revision 8111, SharpDevelop 4.2 now correctly trims the code completion to the target framework (available on the build server). Therefore, if you plan to work with 4.0 / 4.5 today, we recommend to switch to SharpDevelop 4.2.

  • #d^3 2011 Kickoff with a Presentation on NRefactory 5

    Today is the first full day of the 2011 SharpDevelop Developer Days (we had a social event yesterday evening). We kicked off our four day meeting with a presentation by Daniel on NRefactory 5:

    The deck is attached, however, expect us to talk more (and in detail) about NR5 once it is stable enough for general consumption (a goal we are trying very hard to get closer during our meeting).

    We have a great turnout this year, with nine team members in the TZ Bad Ischl this year. We are going to work on SharpDevelop 5 (NRefactory 5), the debugger, CQA addin and a few other interesting topics.

  • SharpDevelop 4.1 Beta

  • ILSpy 1.0 Has Landed

    We let the Beta simmer for about one and a half months to see what bugs would come up, which were necessary to fix for 1.0, and which could be postponed for 2.0. After fixing issues dogeared for 1.0, we finally built the 1.0 RTW release today - and without any further ado, here is the download link to ILSpy 1.0:

    http://sourceforge.net/projects/sharpdevelop/files/ILSpy/1.0/ILSpy_1.0.0.1000_Binaries.zip/download

    Features can be found on the ILSpy homepage, and I'd like to point out that we already progressed nicely with 2.0, with Siegfried having completed the initial implementation of decompilation to VB.NET (learn more).

     

  • ILSpy 1.0 Beta

    It has landed - the Beta of ILSpy 1.0:

    http://sourceforge.net/projects/sharpdevelop/files/ILSpy/1.0/ILSpy_1.0.0.943_Beta_Binaries.zip/download

    What's new / changed: a new BAML decompiler (the main reason for the wait since M3), Analyzer improvements, bug fixes.

    We will focus mainly on bug fixes for the final version (new features will go into 2.0), therefore please test your scenarios and provide feedback so we can get the "gold" version in your hands as soon as possible. Feel free to do so either via our forums or file bug reports directly on GitHub.

    If you are interested in testing the latest versions, please head over to our build server:

    http://build.sharpdevelop.net/BuildArtefacts/#ILSpy

  • ILSpy 1.0 M3 = Object Initializer + Search UI + XML Documentation

    We have now reached the last "internal" development milestone for ILSpy - we are now done with developing new features. From now on our efforts will go into bug fixing, performance improvements and polishing. This will lead to Beta and RTW - both of these will be strictly quality-driven (read: we refuse to give you dates).

    The features have been enumerated in the post’s title already, so without further ado, here is the download:

    http://sourceforge.net/projects/sharpdevelop/files/ILSpy/1.0/ILSpy_1.0.0.822_M3_Binaries.zip/download

    Please provide feedback either via our forums or file bug reports directly on GitHub.

    As usual, if you are interested in testing the latest versions, please head over to our build server:

    http://build.sharpdevelop.net/BuildArtefacts/#ILSpy

  • ILSpy 1.0 Milestone 2 ("M2")

    ILSpy has come a long way since M1 - let me provide you with a quick rundown on new features, starting with the decompilation engine – we now support:

    That list isn’t exhaustive, and we even shipped a separate debugger preview for ILSpy!

    Aside from the improvements to the decompilaton engine, you will also find the MEF-based extensibility in this milestone. For documentation and samples please see the source download (or glance over the readme). We are keen on getting feedback before entering the Beta phase for ILSpy. (ILSpy Forum)

    You want to remote-control ILSpy? This feature has landed too in M2 – to get a highly technical overview, visit our command line readme.

    Now for the bits - the M2 build can be downloaded here:

    http://sourceforge.net/projects/sharpdevelop/files/ILSpy/1.0/ILSpy_1.0.0.737_M2_Binaries.zip/download

    If you are interested in testing the latest versions, please head over to our build server:

    http://build.sharpdevelop.net/BuildArtefacts/#ILSpy

  • Expression Blend Sample Data - in Silverlight

    Yesterday, Siegfried added support for reading Silverlight resources, namely Expression Blend sample data:

  • Analyzing Fields and Methods

    One more new feature in ILSpy - Analyze. It currently works with fields and methods. Simply right-click on a field and select Analyze from the context menu:

    This opens the Analyzer view below the decompilation view (Read By and Assigned By are not expanded by default):

    The same procedure also works with methods, however the analysis is different (Uses and Used By, I did not expand Uses because the Display method does indeed use quite a few other methods):

    Basically, this brings you the "Find Usage" feature in ILSpy. To be added: support for properties and events.

  • IL Instructions Tooltip & Link to MSDN Documentation

    When you are hovering over an IL instruction, you'll get a tooltip (in case you are wondering: the tooltip content is derived from "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.xml")

     

    The hand cursor shows that on clicking the instruction, you will be taken to the MSDN documentation for this instruction (in a separate browser window).

More Posts Next page »
Powered by Community Server (Commercial Edition), by Telligent Systems
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.