SharpDevelop Community

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

Christoph Wille

  • Refactoring Essentials for Visual Studio

    At the SharpDevelop Developer Days 2015 in Bad Ischl we had two focus areas - one was the new decompilation engine for ILSpy vNext (3.0), the other our NRefactory 6 roadmap. NRefactory 6 is our rewrite of the IDE services (code completion, refactorings, et al) from our full-stack (lexer, parser, you-name-it) NRefactory 5 to using Roslyn in the new version. Given that we have a decade of legacy in our stack, rewriting it meant unlearning a few habits, making quite a few architectural changes along the way, and restructuring the project a lot.

    NRefactory 5 had a lot of analyzers and refactorings that we wanted to bring forward, and we did so in the NR6Pack. It was initially tied very tightly to NRefactory, and we had a shared project that copied code to both (at first it was straight linking). As we learned, we removed more and more ties and NR6Pack was finally independent from NRefactory. However, they still shared the same GitHub repository - making contributing unnecessarily hard (oh, and the repo was quite big because the Web properties were also in there).

    Thus, in Ischl we sat down together for name-finding because the initial "pack" was no longer correctly reflecting what was in the codebase: the refactorings had taken center stage. With that in mind, it didn't take us long to settle on a new name - and so 5/30/2015 marked the last release that used the old name (we still wanted a stable release before doing renaming, and, once again, a restructuring).

    Refactoring Essentials has a GitHub repository of its own now, and the Web site is also split out into a GitHub repository (pay for play: devs don't need to download stuff they are not interested in). Also, we no longer tweet as part of the @sharpdevelop account, we now have a dedicated Twitter: @vsrefactoring.

    One thing before closing: although we use the suffix "for Visual Studio", the refactoring/analyzer library itself is a portable class library (PCL). Yes, it is cross platform, and not only for fun: it is used in MonoDevelop today (remember: Refactoring Essentials is a part of our NRefactory 6 effort).

  • ILSpy Decompiler Engine NuGet

    Daniel has created a NuGet package "of" ILSpy - the decompiler engine. It is based off of the 2.3 release, and we want your feedback before officially calling it done in the 2.4 release (and yes, there is no getting started sample, ILSpy doesn't exactly count as that...).

    One important note: ILSpy builds against the source code versions of NRefactory and Cecil (the former needs customizations of the latter). The decompiler NuGet package is built against the official binaries of those two. That is just fine, because the customizations do not matter for the decompiler itself. Just wanted to make this clear because issue #573 refers to the initial problems we had with packaging it in a way so you can use NR and Decompiler both in the same project without versioning issues.

  • Announcing Developer Days 2015

    Last year's event in late August was a social event for the core team members. This year, we are back with an open-to-all developer event around SharpDevelop, ILSpy, NRefactory, NR6Pack, AvalonEdit and more from our ecosystem. Here are the main "W's"

    When: Friday May 29th through Sunday May 31st

    Where: TZ Inneres Salzkammergut, Bad Ischl

    What: See the intro paragraph, but let's expand a bit - there is no conference program ("talks" on a schedule). The main reason for this event was and still is to get together to discuss architectural ideas (way easier and productive in person), do spikes together on certain issues (pair programming if you'd like to call it that), iron out the strategy of the products and in general get to know each other better. This year of course we'll have plenty to discuss with Build and Ignite happening about a month before our event (your guess why we scheduled it that way...).

    Who: Attending core team members include Siegi, Andreas, Mike, Daniel and Peter.

    If you are interested in dropping by, let us know either via the dev mailing list, or get in touch with me directly (email address is on my GitHub profile). I can provide you with travel information (from public transport to accomodation if necessary). Oh, and bring a laptop.

  • NR6Pack 0.5

    We have hit a major internal milestone for NR6Pack, namely completing the infrastructure setup for the project. Now we have a dedicated Web site at, a forum on our community server and the build server set up for automated unit tests of NRefactory.

    In the course of completing 0.5, Siegfried went through the codebase for a first-pass code review of the summer-of-code contributions [*] and more (he and Andreas will continue doing so in January). We want to ratchet up the scenario coverage to give you confidence in using the library, and future contributors a place to go to for "inspiration" on how to unit test their code.

    Having said that, here are the news aside from our quality goals: one new refactoring, three new analyzers (we still have a few unported / untested ones in the repository that currently don't ship).

    What next? Continued focus on quality, more documentation.

    [*] These were part of the Mono project's GSoC. That is why we (the SharpDevelop team) didn't feel responsible back then.

  • NR6Pack Refactorings

    tl;dr VS2015 refactorings galore for free Download

    We are currently busy making NRefactory 6 (NR6) available in multiple different packages - from our "classic" offering of IDE services, now to extensions geared towards Visual Studio 2015. The first package is the Refactorings, which as the name suggests, has the refactorings from NR6 inside (note that those exist in NRefactory 5 too, but those aren't Roslyn-based).

    The list of supported refactorings is already quite impressive, but there is still lots missing / not fully ported / in need of testing. If you feel that contributing to a fully cross-platform Roslyn-based suite of IDE services is something you not only subscribe too but would like to help with, check out the list of missing refactorings.

  • ILSpy Visual Studio Extension

    tl;dr get it here

    Remember the 5.0 release blog post for SharpDevelop? We promised to do interesting things in our ecosystem, and now the first deliverable has landed - a Visual Studio extension for ILSpy.

    Now, this is a v1. This means we provided functionality that is simple, yet useful: Open in ILSpy for referenced assemblies.

    This might not seem huge, but hey, did you have to install ILSpy for getting decompilation support? No. It was shipped in the box (vsix). And this way we will keep it updated in the future when additional features for the extension ship.

    And here's the challenge for our community: what features would you like to see? What priority would you give that feature (or is it only nice to have)? Bonus points for including the scenario why this is important to you!

  • SharpDevelop 5.0 Final

    After five Betas and one RC we are finally hitting release for SharpDevelop 5.0. Here is a recap of some of the most important features and changes from the various development stages (in short):

    Item #1 in this list definitely begs the question "What about VB.NET?" I'd like to extend this question to "What's in the future of SharpDevelop?"

    We have componentized SharpDevelop intentionally for what is coming now - the as-of-today core team moving to specific areas of our ecosystem. Think ILSpy. Think AvalonEdit. Yes, this means that the IDE iself is going to take a back seat. There are a couple of reasons for this decision, ranging from something as simple as time constraints (we are after all a spare-time post-day-job operation - some people call this "life"), to uptake of the various projects (ILSpy is very popular, even when competing against "free as in beer" offerings - can't exactly say that for SharpDevelop) as well as next-to-non-existent influx of new development talent (writing tooling is way uncooler than writing libraries, take a look around).

    Long story short - SharpDevelop is far from "done" (we'd never claim that), but we (the current core team) are realigning our efforts for visibility in the near term. This does not mean SharpDevelop is on "life support" or "dead". It means that bug fixing, small improvements and minor features have priority. Big shiny new things are up to contributions which we are more than happy to accept and help with, simply ping us on the developer mailing list to get started.

    Like the post title says: 5.0 final, and not the final version of SharpDevelop. But we wanted to be open and up front about what level of development pace you as our valued customers can expect.

  • Translators Wanted!

    With the new translation portal launched, we are now actively looking for additional translators to existing languages (to start with). We have the following languages in the system currently:

    The figure to the right is the # of missing translations - the total number of resource strings is a tad over 5000 for SharpDevelop, so you can see that these languages are all at least half-done.

    If you want to volunteer your free time to making SharpDevelop fully translated in your language, please send me an email at christoph.wille @ (remove the spaces around the @ sign) with your language of choice. Thank you for making SharpDevelop a global IDE!

  • Resource-First Translations Web Application Launched

    We have added a new open-source project to our portfolio - the Resource-First Translations (RFT) application, which provides translators of SharpDevelop with a modern and fast experience for helping us by translating SharpDevelop into a language they speak.

    This new application has a couple of goals (taken from the RFT GH readme):

    • Code-First Developers live in the IDE and work directly with resource files. Source control is the source of truth for resources.
    • Multi-Branch Translations come and go with features being added, modified or removed. Translators should never duplicate work.
    • Multi-File Complex software doesn't ship with a single resource file only. Slice your application into modules and still get the benefits of translating only once.
    • Sync Automatically get the latest resource file checkins to the translators, and the finished translations to the developers or the build servers.

    Developers work in the environment they are used to - including branching and merging - and translators get a great effortless experience for translating as well as testing translations. If you want to see that for yourself, either

    The demo installation is actually quite interesting as it runs on Azure Websites (SQL Azure, with Web Jobs and SendGrid for email), whereas in contrast our production installation for SharpDevelop runs on a dedicated box at a hosting facility (SQL Server 2012, with standard scheduled tasks and standard SMTP).

    If you like what you see, feel free to grab a copy and use it for your own purposes! All you basically need is ASP.NET and a SQL Server database to get going. As for grabbing the translated resource files in a real-world project, check out the ResGet integration in SharpDevelop (we don't do build integration).

    Bootnote: we talked about replacing the old ASP-based application for way too long (a solution I'd never open source simply for being way too ashamed of the code quality). But at least it provided us with a list of things we must have to have a great experience going forward.

  • Building SharpDevelop 5

    In order to publically surface a change in the build process of SharpDevelop 5, I'd like to point to a thread from April 19th on the sd-coding mailing list entitled Microsoft Build Tools 2013. (This new dependency is also documented in the section Extended Requirements (building #Develop) on our GH page)

    To quote Daniel: "There is also a bit of a bootstrapping problem with this commit: to compile SharpDevelop with SharpDevelop, you need a SharpDevelop version that already includes this change (version or higher). So you will have to compile SharpDevelop with the .bat files once and install that version. (or alternatively, grab a new installer from the build server when that's up)"

  • SharpDevelop Reporting on NuGet

    In an effort to make the (standalone) components of SharpDevelop more discoverable, we created a NuGet package for our Reporting solution. It is available as a pre-relase package, thus you need the -pre switch in the console or ensure that you aren't looking at stable packages only in the Manage Packages dialog.

    Additionally, we have split out the Reporting samples into a repository of their own (previously part of the SharpDevelop source code download), where they live side-by-side with the nuspec for SharpDevelop Reporting. The Wiki is currently a direct port of the previous site (which now redirects to the Wiki on GH), and not yet fully adapted to the new SharpDevelop 5 screens and usage instructions.

    We hope that this will make using our Reporting solution both easier and more enjoyable.

  • SD-Coding: The Place for Developers

    Up until today, we only had an “internal” mailing list for developers with JCAs on file. Mostly for the reason so everyone knows that when code comes from members of this list, it is safe to be incorporated into the codebase. (release coordination another hot item)

    However, we no longer require JCAs for SharpDevelop 5 and beyond (license change info). We mulled the options of opening up the existing list, or creating a new one. Because the existing members might not want to see the extra traffic, we decided that it would be better to invite everyone – existing contributors as well as new and prospective ones – to join on their terms.

    The sign up for the mailing list can be found at this URL:

    What do we expect to see as topics? For one, we think it is extraordinarily important to have a platform to discuss ideas: be it to see if this is something that is generally considered a good idea, whether it has been discussed before, or if someone is already working on it (duplication of work can be avoided). Alas, if you are working on bug fixes or new features, and have questions about the architecture, the testing philosophy and about anything on the internal design, this is the place to go.

  • What's New in SD5: Automatic Variable Naming

    In the blog post Context Actions I showed how to refactor existing code into a new method, and how Link Mode allows you to rename it. But there was a slight problem which this code exhibited at that time:

    Had I refactored "(j % 5)" into a new local variable (via Declare local variable), it would have named it "i". You got yourselves a name collision (same with NewMethod if you performed Extract Method twice before renaming the first instance).

    The new behavior is as follows - you choose to Declare local variable:

    SharpDevelop will look in the scope to see if there is already a variable "i" and append the next free number to it:

    Because Link Mode is now enabled, you can immediately start typing and rename the variable to your liking:

    As usual, you can grab the latest bits from our build server.

    Posted Feb 09 2014, 09:54 AM by ChristophWille with no comments
    Filed under:
  • What's New in SD5: Suppressing Issues

    I have introduced you to code issues / inspections already, today we are going to talk about "silencing" issues that are either false positives or intentional. Coming in Beta 2 you will be able to turn off an inspection once or entirely. Let's look at an example:

    Calling a virtual member in a constructor isn't good practice, that's why the inspection tells you that you have a problem here. But what if that is intentional, and you don't want somebody else to inadvertently "fix" this when they get the flag too? Well, you can turn it off:

    This will insert a comment of format "// disable once {name of code issue}" above the method call:

    And as you can see, the squiggly lines are gone and SharpDevelop no longer compains about you calling a virtual method.

    Posted Feb 09 2014, 09:40 AM by ChristophWille with no comments
    Filed under:
  • What's New in SD5: Jump to Documentation in Tooltips

    The previous post What's New in SD5: Richtext XML DocumentationTooltips talked about the new, rich, documentation tooltips. As of today, the link target functionality is available in SharpDevelop 5, via Tools / Options / Text Editor / Code Completion:

    It will default to Help for Framework classes, with a fallback to Definition for everything else.


    Posted Feb 08 2014, 06:02 PM by ChristophWille with no comments
    Filed under:
More Posts Next page »
Powered by Community Server (Commercial Edition), by Telligent Systems
Don't contact us via this ( email address.