<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.sharpdevelop.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SharpDevelop Community</title><link>http://community.sharpdevelop.net/blogs/</link><description>Get your problems solved!</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 SP2 (Build: 31113.47)</generator><item><title>Getting Started With SDR</title><link>http://community.sharpdevelop.net/blogs/sharpdevelopreports/archive/2010/01/13/getting-started-with-sdr.aspx</link><pubDate>Wed, 13 Jan 2010 14:19:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:29284</guid><dc:creator>Peter Forstmeier</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;For those of you that haven&amp;#39;t followed the development of SDR in the past, a quick introduction on how to get started.&lt;/p&gt;
&lt;p&gt;There is a Wiki dedicated to SDR: &lt;a href="http://sharpdevelopreports.net/"&gt;http://sharpdevelopreports.net/&lt;/a&gt;&amp;nbsp;(please note that it hasn&amp;#39;t been updated yet for the fact that SDR is now back in the fold with SharpDevelop)&lt;/p&gt;
&lt;p&gt;It contains a &lt;a href="http://sharpdevelopreports.net/FeatureTour.ashx" class="null"&gt;feature tour&lt;/a&gt; (with screenshots) to give you an idea how to get up and running quickly. I&amp;#39;d also recommend reading the &lt;a href="http://community.sharpdevelop.net/blogs/sharpdevelopreports/archive/2009/10/05/what-s-new-in-sharpdevelop-reports-3-beta.aspx" class="null"&gt;what&amp;#39;s new blog post from the SDR beta&lt;/a&gt;, as it contains information on the newly added functionality (such as expression support).&lt;/p&gt;
&lt;p&gt;Speaking of support: there is a &lt;a href="http://community.sharpdevelop.net/forums/44.aspx" class="null"&gt;dedicated forum for SDR&lt;/a&gt; on our community site, please let me know about problems, ideas, fixes et al there!&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=29284" width="1" height="1"&gt;</description></item><item><title>SharpDevelop Reports Re-Integrated Into SharpDevelop</title><link>http://community.sharpdevelop.net/blogs/sharpdevelopreports/archive/2010/01/05/sharpdevelop-reports-re-integrated-into-sharpdevelop.aspx</link><pubDate>Tue, 05 Jan 2010 22:18:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:29283</guid><dc:creator>Peter Forstmeier</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;As of today, SharpDevelop Reports (SDR) is once again an integral part of SharpDevelop!&lt;/p&gt;
&lt;p&gt;It will be shipped with SharpDevelop 3.2 (~spring 2010), but it is already available on the &lt;a href="http://build.sharpdevelop.net/BuildArtefacts/" class="null"&gt;build server&lt;/a&gt; as part of the SharpDevelop integration builds. Please note that the standalone designer build is no longer available on the build server.&lt;/p&gt;
&lt;p&gt;Sample reports can be found in the source download of SharpDevelop in the folder Samples\SharpDevelopReports.&lt;/p&gt;
&lt;p&gt;Upcoming changes before the CTP of SharpDevelop 3.2: iTextSharp will be updated to version 5.0, and we no longer include the source code for it in the repository (only as a zip in the vendor directory, which is not part of the source download).&lt;/p&gt;
&lt;p&gt;Next tasks: more samples, more documentation, bug fixing.&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=29283" width="1" height="1"&gt;</description></item><item><title>IronRuby Integration Update</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/12/30/IronRubyIntegrationUpdate.aspx</link><pubDate>Wed, 30 Dec 2009 14:24:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:29142</guid><dc:creator>MattWard</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Support for IronRuby in SharpDevelop has moved on since the 
    &lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2009/10/04/IronRubyIntegrationInSharpDevelop31.aspx"&gt;last alpha release of the IronRuby addin&lt;/a&gt;. This addin now ships 
    with SharpDevelop 3.2 which is available to download from the 
    &lt;a href="http://build.sharpdevelop.net/buildartefacts/"&gt;build 
    server&lt;/a&gt;. The main new features are support for IronRuby 1.0 RC 1 
    and the ability to debug IronRuby applications.&lt;/p&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows Forms designer support now complete&lt;/li&gt;
&lt;li&gt;Converting entire C# and VB.NET projects to IronRuby.&lt;/li&gt;
&lt;li&gt;Debugger support for IronRuby applications.&lt;/li&gt;
&lt;li&gt;Smart indenting for IronRuby code.&lt;/li&gt;
&lt;li&gt;IronRuby 1.0 RC 1 support.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Currently there is no support for IronRuby code completion.&lt;/p&gt;
&lt;p&gt;Now we will take a look at some of the new features in more 
    depth.&lt;/p&gt;
&lt;h2&gt;Running an IronRuby Application&lt;/h2&gt;
&lt;p&gt;After you create an IronRuby application you can run it 
    immediately without having to edit the project options as you did 
    previously. The project templates have been updated so that 
    everything is ready to go straight away. Simply select &lt;b&gt;Run&lt;/b&gt; 
    from the &lt;b&gt;Debug&lt;/b&gt; menu to run your application with the 
    IronRuby console.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Debug run menu option" src="http://community.sharpdevelop.net/photos/mattward/images/original/DebugRunMenuOption.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Debugging an IronRuby Application&lt;/h2&gt;
&lt;p&gt;In order to get the debugger to work well when debugging an 
    IronRuby application you should change the debugger options. To 
    open the debugger options select &lt;b&gt;Options&lt;/b&gt; from the 
    &lt;b&gt;Tools&lt;/b&gt; menu, then select the &lt;b&gt;Debugging&lt;/b&gt; category. Only 
    the &amp;#39;Just My Code&amp;#39; feature should be selected and 
    everything else should be unselected, as shown in the screenshot 
    below.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Debugger options when debugging an IronRuby application" src="http://community.sharpdevelop.net/photos/mattward/images/original/IronRubyDebuggerOptions.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;You can set your breakpoints in the normal way either by 
    clicking in the left hand margin of the text editor or by selecting 
    &lt;b&gt;Toggle Breakpoint&lt;/b&gt; from the &lt;b&gt;Debug&lt;/b&gt; menu.&lt;/p&gt;
&lt;p&gt;Selecting &lt;b&gt;Run&lt;/b&gt; from the &lt;b&gt;Debug&lt;/b&gt; menu will run your 
    IronRuby application under the debugger. Alternatively you can 
    select &lt;b&gt;Run&lt;/b&gt; from the &lt;b&gt;Ruby&lt;/b&gt; menu which will run the code 
    currently active text editor window. Selecting either of these will 
    run the IronRuby console in debug mode with SharpDevelop&amp;#39;s 
    debugger.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Breakpoint hit in IronRuby application" src="http://community.sharpdevelop.net/photos/mattward/images/original/DebuggingIronRubyCode.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Converting a C# or VB.NET Project to IronRuby&lt;/h2&gt;
&lt;p&gt;To convert a VB.NET or C# project to IronRuby open the project 
    and then select &lt;b&gt;Convert from C# to Ruby&lt;/b&gt; or &lt;b&gt;Convert from 
    VB.NET to Ruby&lt;/b&gt; from the &lt;b&gt;Project&lt;/b&gt; menu.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Convert project to Ruby menu item" src="http://community.sharpdevelop.net/photos/mattward/images/original/ConvertProjectToRubyMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Extra Ruby Libraries&lt;/h2&gt;
&lt;p&gt;The 
    &lt;a href="http://ironruby.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35312#DownloadId=93832"&gt;IronRuby 1.0 RC 1 download&lt;/a&gt; from 
    &lt;a href="http://ironruby.codeplex.com"&gt;codeplex&lt;/a&gt; includes extra 
    Ruby libraries that are not shipping with SharpDevelop. If you want 
    to use these libraries then download the IronRuby zip file and copy 
    the &lt;b&gt;lib&lt;/b&gt; folder to the IronRuby addin folder:&lt;/p&gt;
&lt;p&gt;C:\Program 
    Files\SharpDevelop\3.0\AddIns\AddIns\BackendBindings\RubyBinding&lt;/p&gt;
&lt;p&gt;The IronRuby console (ir.exe) is configured to look in the 
    &lt;b&gt;lib&lt;/b&gt; subfolder by information in the ir.exe.config file:&lt;/p&gt;
&lt;pre&gt;&amp;lt;options&amp;gt; &lt;br /&gt;   &amp;lt;set language=&amp;#39;Ruby&amp;#39; option=&amp;#39;LibraryPaths&amp;#39; value=&amp;#39;lib\IronRuby;lib\Ruby\site_ruby\1.8;lib\Ruby\site_ruby;lib\Ruby\1.8&amp;#39;/&amp;gt; &lt;br /&gt;&amp;lt;/options&amp;gt;&lt;/pre&gt;
&lt;p&gt;If you want to put these Ruby libraries somewhere else then the 
    ir.exe.config file should be modified.&lt;/p&gt;
&lt;h2&gt;IronRuby Downloads&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://ironruby.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35312#DownloadId=93832"&gt;IronRuby 1.0 RC 1 from Codeplex&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=29142" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Ruby/default.aspx">Ruby</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>What’s New in SharpDevelop Reports 3 Beta</title><link>http://community.sharpdevelop.net/blogs/sharpdevelopreports/archive/2009/10/05/what-s-new-in-sharpdevelop-reports-3-beta.aspx</link><pubDate>Mon, 05 Oct 2009 16:19:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:28174</guid><dc:creator>Peter Forstmeier</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Designer is using the infrastructure from Windows.Forms.Designer&lt;/li&gt;
&lt;li&gt;Run Expressions inside a Report; based on the work of&amp;nbsp; &lt;a href="http://irony.codeplex.com/" class="null"&gt;Irony&lt;/a&gt; and &lt;a href="http://simpleexpressioneval.codeplex.com/" class="null"&gt;Simpleexpressionevaluator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;UnitTests for many&amp;nbsp; (increasing number) of Classes &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Designer in Action:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_5.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_1.jpg"&gt;&lt;img src="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;TextEditor, useful to enter some text and/or expressions:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_2.jpg"&gt;&lt;img src="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0066cc;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0066cc;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0066cc;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0066cc;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A very simple report in List layout with PageNumber in the PageFooter section and Aggregate function count() in ReportFooter:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_3.jpg"&gt;&lt;img src="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some more functions:&lt;br /&gt;Line 1 (middle):&amp;nbsp;&amp;nbsp;&amp;nbsp;nothing to evaluate &amp;ndash; (right) concat two fields&lt;br /&gt;Line2 (middle and right):&amp;nbsp; Userfunctions&lt;br /&gt;Line 3 (middle and right) :&amp;nbsp;Globalfunctions&lt;br /&gt;Line 4 :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; show parameters inside report, useful for queries&lt;br /&gt;Line 5:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple calculation&lt;br /&gt;Line 6:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; etc, some more functions&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_4.jpg"&gt;&lt;img src="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;The Result:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_5.jpg"&gt;&lt;img src="http://community.sharpdevelop.net/blogs/sharpdevelopreports/Designer_5.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=28174" width="1" height="1"&gt;</description></item><item><title>IronRuby Integration in SharpDevelop 3.1</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/10/04/IronRubyIntegrationInSharpDevelop31.aspx</link><pubDate>Sun, 04 Oct 2009 12:32:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:28157</guid><dc:creator>MattWard</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Support for 
    &lt;a href="http://ironruby.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30916"&gt;IronRuby 0.9.1&lt;/a&gt; is now available for 
    &lt;a href="http://sourceforge.net/projects/sharpdevelop/files/SharpDevelop%203.x/3.1/SharpDevelop_3.1.0.4977_Setup.msi/download"&gt;SharpDevelop 3.1&lt;/a&gt;. The IronRuby addin is an early alpha preview 
    release/proof of concept and is not an official part of 
    SharpDevelop 3.1 so it is available as a separate download at the 
    end of this post.&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Code folding&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;File and project templates for Console and Windows Forms 
      applications&lt;/li&gt;
&lt;li&gt;IronRuby Console window&lt;/li&gt;
&lt;li&gt;Windows Forms designer (limited)&lt;/li&gt;
&lt;li&gt;C# and VB.NET code conversion to Ruby (limited)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please note that the forms designer and code conversion need a 
    lot more work.&lt;/p&gt;
&lt;h2&gt;Creating a Windows Application&lt;/h2&gt;
&lt;p&gt;Open up the new project dialog by selecting &lt;b&gt;New&lt;/b&gt; then 
    &lt;b&gt;Solution&lt;/b&gt; from the &lt;b&gt;File&lt;/b&gt; menu. Selecting the Ruby 
    category will show two project templates. One will create a Windows 
    console application and the other will create a Windows Forms 
    application.&lt;/p&gt;
&lt;p&gt;&lt;img alt="New IronRuby Project Dialog" src="http://community.sharpdevelop.net/photos/mattward/images/original/NewRubyProjectDialog.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;To run your application ensure the Program.rb file is in the 
    active text editor window then select &lt;b&gt;Run&lt;/b&gt; from the 
    &lt;b&gt;Ruby&lt;/b&gt; menu. This will run your code with the IronRuby console 
    (ir.exe). Alternatively you can run the application by selecting 
    &lt;b&gt;Run&lt;/b&gt; from the &lt;b&gt;Debug&lt;/b&gt; menu but you will first need to 
    configure the project options. Select &lt;b&gt;Project Options&lt;/b&gt; from 
    the &lt;b&gt;Project&lt;/b&gt; menu to open up the Debug project options.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Debug project options dialog" src="http://community.sharpdevelop.net/photos/mattward/images/original/RubyDebugProjectOptions.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;You will need to add &lt;b&gt;${ProjectDir}&lt;/b&gt; to the command line 
    arguments and working directory as shown above. The &lt;b&gt;-19&lt;/b&gt; 
    command line argument is used to enable Ruby 1.9 support otherwise 
    the IronRuby console will not be able to load any UTF-8 source code 
    files.&lt;/p&gt;
&lt;p&gt;Currently you cannot debug your code even if the -D command line 
    argument is specified.&lt;/p&gt;
&lt;p&gt;If you are running a windows app and nothing seems to happen 
    then open a command line window and run it from there. This way you 
    should see any errors reported from the IronRuby console.&lt;/p&gt;
&lt;h2&gt;Designing Windows Forms&lt;/h2&gt;
&lt;p&gt;The Windows Forms designer is still in its early stages so 
    please be warned that it may break the form&amp;#39;s code or worse. 
    The designer code generation is a lot more complete than the 
    designer loader so the designer will most likely fail to load all 
    controls into the designer.&lt;/p&gt;
&lt;p&gt;The designer can be opened in the usual way by opening the form 
    in the text editor and selecting the Design tab at the bottom of 
    the text editor. Once open in the designer you can add controls to 
    the form in the usual way from the Tools window. In the screenshot 
    below a label, text box and a button have been added.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Main form designed in designer" src="http://community.sharpdevelop.net/photos/mattward/images/original/RubyMainFormInDesigner.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Click the Source tab to view the generated code in the 
    InitializeComponents method. Make sure you do this before trying to 
    save the code.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Generated form code" src="http://community.sharpdevelop.net/photos/mattward/images/original/RubyMainFormGeneratedCode.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;IronRuby Console&lt;/h2&gt;
&lt;p&gt;To open the IronRuby Console window select &lt;b&gt;Tools&lt;/b&gt;, &lt;b&gt;Ruby 
    Console&lt;/b&gt; from the &lt;b&gt;View&lt;/b&gt; menu.&lt;/p&gt;
&lt;p&gt;&lt;img alt="View IronRuby Console menu item" src="http://community.sharpdevelop.net/photos/mattward/images/original/ViewIronRubyConsoleMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;When you type Ruby code into the IronRuby Console you will get 
    code completion when you press the &amp;#39;.&amp;#39; character.&lt;/p&gt;
&lt;p&gt;&lt;img alt="IronRuby Console code completion" src="http://community.sharpdevelop.net/photos/mattward/images/original/IronRubyConsoleCodeCompletion.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Code Folding&lt;/h2&gt;
&lt;p&gt;Code folding allows you to collapse regions of a class.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Folded ruby code" src="http://community.sharpdevelop.net/photos/mattward/images/original/RubyClassFolded.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Code Conversion&lt;/h2&gt;
&lt;p&gt;To convert VB.NET or C# to Ruby open the file you want to 
    convert and then select &lt;b&gt;Convert code to Ruby&lt;/b&gt; from the 
    &lt;b&gt;Tools&lt;/b&gt; menu.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Convert code to Ruby menu item" src="http://community.sharpdevelop.net/photos/mattward/images/original/ConvertCodeToRubyMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;The code conversion is limited to classes so it will not convert 
    an arbitary piece of code that is not inside a class. A C# class 
    being converted to Ruby is shown below.&lt;/p&gt;
&lt;p&gt;&lt;img alt="C# code before converting to Ruby" src="http://community.sharpdevelop.net/photos/mattward/images/original/CSharpCodeBeforeConversionToRuby.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Converted Ruby code" src="http://community.sharpdevelop.net/photos/mattward/images/original/ConvertedCSharpClassAsRuby.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;The code conversion is still at an early stage of development so 
    it will fail on complicated classes.&lt;/p&gt;
&lt;h2&gt;Class View&lt;/h2&gt;
&lt;p&gt;Classes in the open solution will be displayed in the Class 
    browser (Select &lt;b&gt;Classes&lt;/b&gt; from the &lt;b&gt;View&lt;/b&gt; menu).&lt;/p&gt;
&lt;p&gt;&lt;img alt="Ruby class in Classes window" src="http://community.sharpdevelop.net/photos/mattward/images/original/RubyClassInClassWindow.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;From there you can double click a class or method and the text 
    editor will display the corresponding code.&lt;/p&gt;
&lt;h2&gt;Installing the IronRuby AddIn&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Rename the 
      &lt;a href="http://community.sharpdevelop.net/blogs/mattward/Ruby/IronRubyAddIn-0.1.zip"&gt;IronRubyAddIn-0.1.zip&lt;/a&gt; file to 
      &lt;b&gt;IronRubyAddIn-0.1.sdaddin&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;
        From the 
        &lt;b&gt;Tools&lt;/b&gt;
         menu select 
        &lt;b&gt;AddIn Manager&lt;/b&gt;
         .
&lt;p&gt;&lt;img alt="Tools AddIn Manager menu item" src="http://community.sharpdevelop.net/photos/mattward/images/original/ToolsAddInManagerMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
        Click the 
        &lt;b&gt;Install AddIn&lt;/b&gt;
         button.
&lt;p&gt;&lt;img alt="AddIn Manager dialog" src="http://community.sharpdevelop.net/photos/mattward/images/original/AddInManagerDialog.aspx" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
        In the Open File Dialog browse to the 
        &lt;b&gt;IronRubyAddIn-0.1.sdaddin&lt;/b&gt;
         file and click the 
        &lt;b&gt;Open&lt;/b&gt;
         button.
&lt;p&gt;&lt;img alt="AddIn installed confirmation dialog." src="http://community.sharpdevelop.net/photos/mattward/images/original/IronRubyAddInInstalledDialog.aspx" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Click the &lt;b&gt;Close&lt;/b&gt; button.&lt;/li&gt;
&lt;li&gt;Restart SharpDevelop.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Ruby Links&lt;/h2&gt;
&lt;p&gt;Some of the Ruby tutorials and links used whilst creating the 
    IronRuby addin.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.ruby-lang.org/en/documentation/"&gt;Ruby 
      documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sapphiresteel.com/The-Book-Of-Ruby"&gt;Book 
      of Ruby&lt;/a&gt; by Huw Collingbourne.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/IronRuby"&gt;IronRuby 
      homepage&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/mattward/Ruby/IronRubyAddIn-0.1.zip"&gt;IronRubyAddIn0.1.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.sharpdevelop.net/blogs/mattward/Ruby/IronRubyAddIn-0.1-src.zip"&gt;IronRubyAddIn0.1-src.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=28157" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Ruby/default.aspx">Ruby</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>IronPython Auto-Indent</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/09/30/IronPythonAutoIndent.aspx</link><pubDate>Wed, 30 Sep 2009 15:36:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:28113</guid><dc:creator>MattWard</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Python auto-indentation has now been added to 
    &lt;a href="http://build.sharpdevelop.net/BuildArtefacts/"&gt;
    SharpDevelop 3.1 in revision 5007&lt;/a&gt;. The latest SharpDevelop 
    builds can be downloaded from the 
    &lt;a href="http://build.sharpdevelop.net/BuildArtefacts/"&gt;build 
    server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The indentation will be increased after a line ending with the 
    colon character, such as a method declaration. After typing in a 
    pass or return statement the indentation will be decreased on the 
    following line.&lt;/p&gt;
&lt;p&gt;&lt;img alt="IronPython auto-indentation" src="http://community.sharpdevelop.net/photos/mattward/images/original/IronPythonSmartIndent.aspx" /&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=28113" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Python/default.aspx">Python</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronPython/default.aspx">IronPython</category></item><item><title>IronPython Form Resources</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/09/28/IronPythonFormResources.aspx</link><pubDate>Mon, 28 Sep 2009 15:39:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:28083</guid><dc:creator>MattWard</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Getting an IronPython WinForm to display an icon or image can be 
    done in different ways. Here we will take a look at the following 
    ways to add a background image to the main form of an IronPython 
    WinForms application.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Using the SharpDevelop forms designer.&lt;/li&gt;
&lt;li&gt;Loading an image embedded as a resource in a separate 
      assembly.&lt;/li&gt;
&lt;li&gt;Loading an image from disk.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Using the SharpDevelop Forms Designer&lt;/h2&gt;
&lt;p&gt;The SharpDevelop forms designer can be used to add resources to 
    a form in the same way for other languages such as C# or VB.NET. It 
    supports adding local form resources but not project resources 
    currently.&lt;/p&gt;
&lt;p&gt;After 
    &lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2009/05/12/IronPython2FormsDesigner.aspx"&gt;creating a new IronPython Windows Application&lt;/a&gt;, open the 
    MainForm in the designer. In the Properties window select the 
    BackgroundImage property of the MainForm and click the browse 
    button.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Form&amp;#39;s BackgroundImage property in Properties window" src="http://community.sharpdevelop.net/photos/mattward/images/original/MainFormBackgroundImageProperty.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Select Local Resource then click the Import button to browse to 
    the image file you are going to use.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Local resource selected in resource dialog" src="http://community.sharpdevelop.net/photos/mattward/images/original/SelectLocalResourceDialog.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Click OK to close the dialog. The background image should then 
    be displayed in the form. If you select Run from the Debug menu 
    your application will be compiled and the main form should be 
    displayed with your image.&lt;/p&gt;
&lt;p&gt;Now let us take a look at the code generated for the form.&lt;/p&gt;
&lt;pre&gt;import System.Drawing &lt;br /&gt;import System.Windows.Forms &lt;br /&gt; &lt;br /&gt;from System.Drawing import * &lt;br /&gt;from System.Windows.Forms import * &lt;br /&gt; &lt;br /&gt;class MainForm(Form): &lt;br /&gt; def __init__(self): &lt;br /&gt;  self.InitializeComponent() &lt;br /&gt;  &lt;br /&gt; def InitializeComponent(self): &lt;br /&gt;  resources = System.Resources.ResourceManager(&amp;quot;PythonWinApp.MainForm&amp;quot;, System.Reflection.Assembly.GetEntryAssembly()) &lt;br /&gt;  self.SuspendLayout() &lt;br /&gt;  #  &lt;br /&gt;  # MainForm &lt;br /&gt;  #  &lt;br /&gt;  self.BackgroundImage = resources.GetObject(&amp;quot;$this.BackgroundImage&amp;quot;) &lt;br /&gt;  self.ClientSize = System.Drawing.Size(284, 264) &lt;br /&gt;  self.Name = &amp;quot;MainForm&amp;quot; &lt;br /&gt;  self.ResumeLayout(False)&lt;/pre&gt;
&lt;p&gt;The generated code for the InitializeComponent method is nearly 
    the same as the code generated by the forms designer when adding a 
    resource to a C# form. The generated C# code is shown below.&lt;/p&gt;
&lt;pre&gt;  private void InitializeComponent() &lt;br /&gt;  { &lt;br /&gt;   System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); &lt;br /&gt;   this.SuspendLayout(); &lt;br /&gt;   //  &lt;br /&gt;   // MainForm &lt;br /&gt;   //  &lt;br /&gt;   this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); &lt;br /&gt;   this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; &lt;br /&gt;   this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject(&amp;quot;$this.BackgroundImage&amp;quot;))); &lt;br /&gt;   this.ClientSize = new System.Drawing.Size(284, 264); &lt;br /&gt;   this.Name = &amp;quot;MainForm&amp;quot;; &lt;br /&gt;   this.Text = &amp;quot;WinApp&amp;quot;; &lt;br /&gt;   this.ResumeLayout(false); &lt;br /&gt;  } &lt;/pre&gt;
&lt;p&gt;The C# form uses the ComponentResourceManager class and 
    typeof(MainForm) to get access to the embedded resource. The 
    IronPython form uses the ResourceManager class instead. If we try 
    to use a ComponentResourceManager in the IronPython application by 
    replacing the resources line with:&lt;/p&gt;
&lt;pre&gt;resources = System.ComponentModel.ComponentResourceManager(clr.GetClrType(MainForm))&lt;/pre&gt;
&lt;p&gt;The application will throw an NotSupportedException when it is 
    run with an error message saying that &amp;quot;The invoked member is 
    not supported in a dynamic assembly.&amp;quot;. The line of code that 
    actually causes this error is the resources.GetObject() line. So we 
    cannot read a resource from a dynamic assembly, but even if we 
    could the resources are not actually embedded in the assembly that 
    contains the code for the MainForm. When the IronPython application 
    is compiled two files are generated an executable and a dll. The 
    dll is generated using IronPython&amp;#39;s ClrModule.CompileModules 
    which is used to compile all the IronPython code into an assembly. 
    The exe is generated using several Reflection.Emit calls and its 
    only task is to call PythonOps.InitializeModule passing the 
    filename of the generated dll. If you look at the exe using 
    Reflector you can see a PythonMain class with a Main method similar 
    to that shown below.&lt;/p&gt;
&lt;pre&gt;[STAThread] &lt;br /&gt;public static int Main() &lt;br /&gt;{ &lt;br /&gt;    string[] references = new string[] { &amp;quot;IronPython, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot;, &lt;br /&gt;        &amp;quot;mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot;, &lt;br /&gt;        &amp;quot;System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot;, &lt;br /&gt;        &amp;quot;System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot;, &amp;quot;System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot;, &lt;br /&gt;        &amp;quot;System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot;, &lt;br /&gt;        &amp;quot;System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; }; &lt;br /&gt;    return PythonOps.InitializeModule(Assembly.LoadFile(Path.GetFullPath(&amp;quot;PythonWinApp.dll&amp;quot;)), &amp;quot;Program&amp;quot;, references); &lt;br /&gt;} &lt;/pre&gt;
&lt;p&gt;With Reflector you can also see that the form resources are 
    embedded into the executable and not the dll. So this means our 
    form code needs to load the resources from the executable. This is 
    done in the generated form designer code by passing the entry 
    assembly, which will be the executable containing the resources, to 
    the ResourceManager as shown below.&lt;/p&gt;
&lt;pre&gt;resources = System.Resources.ResourceManager(&amp;quot;PythonWinApp.MainForm&amp;quot;, System.Reflection.Assembly.GetEntryAssembly())&lt;/pre&gt;
&lt;p&gt;The above code will not work if you try to run your application 
    with the IronPython Console (ipy.exe) since the entry assembly will 
    actually be ipy.exe. The following sections will look at using form 
    resources that can be used when running your code with ipy.exe.&lt;/p&gt;
&lt;h2&gt;Loading an Image from an Assembly&lt;/h2&gt;
&lt;p&gt;Here we will have two projects, one with the IronPython form and 
    one with the image resource. In the resource project you have a 
    choice of whether you are going to put your image inside a resource 
    file (.resx) or simply add it to the project and set its Build 
    Action to EmbeddedResource. For now let us add the image to a 
    resource file. Add a new resource file and then open it into the 
    editor. Add your image to the resource file by right clicking and 
    selecting Add files...&lt;/p&gt;
&lt;p&gt;&lt;img alt="Add files to resx menu item" src="http://community.sharpdevelop.net/photos/mattward/images/original/AddFilesToResourcesContextMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Finally compile your resource assembly.&lt;/p&gt;
&lt;p&gt;From your IronPython WinForms project you can load the image 
    from this resource assembly with code similar to the following:&lt;/p&gt;
&lt;pre&gt;class MainForm(Form): &lt;br /&gt; def __init__(self): &lt;br /&gt;  self.InitializeComponent() &lt;br /&gt;  fileName = System.IO.Path.GetFullPath(&amp;quot;Resources\\ResourceLibrary.dll&amp;quot;) &lt;br /&gt;  assembly = System.Reflection.Assembly.LoadFile(fileName) &lt;br /&gt;  resources = System.Resources.ResourceManager(&amp;quot;ResourceLibrary.Resources&amp;quot;, assembly) &lt;br /&gt;  self.BackgroundImage = resources.GetObject(&amp;quot;SharpDevelop&amp;quot;) &lt;br /&gt;  &lt;br /&gt; def InitializeComponent(self): &lt;br /&gt;  pass&lt;/pre&gt;
&lt;p&gt;The code loads the resource assembly (ResourceLibrary.dll) by 
    assuming it is in the Resources subfolder off the current working 
    directory. The name of the embedded resource and the loaded 
    assembly are then passed to the ResourceManager. Finally the 
    SharpDevelop image is read from the resource manager via the 
    GetObject method. This code will work with both ipy.exe and when 
    the application is compiled but it uses the current working 
    directory is used to determine the location of the resource 
    assembly. An improvement is to use a path relative to the 
    MainForm.py file itself.&lt;/p&gt;
&lt;pre&gt;class MainForm(Form): &lt;br /&gt; def __init__(self): &lt;br /&gt;  self.InitializeComponent() &lt;br /&gt;  directoryName = System.IO.Path.GetDirectoryName(__file__) &lt;br /&gt;  fileName = System.IO.Path.Combine(directoryName, &amp;quot;Resources\ResourceLibrary.dll&amp;quot;) &lt;br /&gt;  assembly = System.Reflection.Assembly.LoadFile(fileName) &lt;br /&gt;  resources = System.Resources.ResourceManager(&amp;quot;ResourceLibrary.Resources&amp;quot;, assembly) &lt;br /&gt;  self.BackgroundImage = resources.GetObject(&amp;quot;SharpDevelop&amp;quot;) &lt;br /&gt;  &lt;br /&gt; def InitializeComponent(self): &lt;br /&gt;  pass&lt;/pre&gt;
&lt;p&gt;With this modified code we get the full filename including its 
    path to the MainForm.py file by using the __file__ constant. Then 
    we can get the full path to the resource assembly relative to the 
    MainForm.py file. This code will work with ipy.exe but not if the 
    application is compiled. With the compiled application the __file__ 
    constant returns the name of the file without its extension and 
    without any path information.&lt;/p&gt;
&lt;h2&gt;Loading an Image from Disk&lt;/h2&gt;
&lt;p&gt;Here we assume the image (SharpDevelop.png) is in a Resources 
    subfolder relative to the MainForm.py file.&lt;/p&gt;
&lt;pre&gt;class MainForm(Form): &lt;br /&gt; def __init__(self): &lt;br /&gt;  self.InitializeComponent() &lt;br /&gt;  directoryName = System.IO.Path.GetDirectoryName(__file__) &lt;br /&gt;  fileName = System.IO.Path.Combine(directoryName, &amp;quot;Resources\\SharpDevelop.png&amp;quot;) &lt;br /&gt;  self.BackgroundImage = System.Drawing.Bitmap(fileName) &lt;br /&gt;  &lt;br /&gt; def InitializeComponent(self): &lt;br /&gt;  pass&lt;/pre&gt;
&lt;p&gt;Here the code simply determines the full path to the image and 
    then loads it into a Bitmap. The Bitmap is then used to set the 
    form&amp;#39;s background image. Again this code will work with 
    ipy.exe but not if the application is compiled.&lt;/p&gt;
&lt;p&gt;Example code for all the ways of using resources in IronPython 
    can be found in the 
    &lt;a href="http://community.sharpdevelop.net/blogs/mattward/Python/IronPythonFormResourceExamples.zip"&gt;
    IronPythonFormResourceExamples.zip&lt;/a&gt; file.&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=28083" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Python/default.aspx">Python</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronPython/default.aspx">IronPython</category></item><item><title>New debugger features implemented during #d^3</title><link>http://community.sharpdevelop.net/blogs/martinkonicek/archive/2009/09/10/new-debugger-features-implemented-during-d-3.aspx</link><pubDate>Thu, 10 Sep 2009 00:46:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:27881</guid><dc:creator>martinkonicek</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;During &lt;a target="_self" title="#d^3" href="http://laputa.sharpdevelop.net/SharpDevelopDeveloperDays2009.aspx"&gt;SharpDevelop developer days 2009&lt;/a&gt; we implemented new debugger features to appear in SharpDevelop 4:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Debugger tooltips for IEnumerable&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt="Debugger tooltips for IEnumerable" src="http://community.sharpdevelop.net/blogs/martinkonicek/images/IEnumerableTooltips.png" height="462" width="604" /&gt;&lt;/p&gt;
&lt;p&gt;The individual items of IEnumerable can be expanded normally.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Text visualizer&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;There is a new visualizer chooser in debugger tooltips.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Choose visualizer from debugger tooltips" src="http://community.sharpdevelop.net/blogs/martinkonicek/images/VisPicker.png" height="108" width="409" /&gt;&lt;/p&gt;
&lt;p&gt;For string values, Text and XML visualizers are available. Choosing &amp;quot;Text visualizer&amp;quot; shows a window:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt="Text visualizer" src="http://community.sharpdevelop.net/blogs/martinkonicek/images/TextVisualizer.png" height="334" width="575" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;XML visualizer&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;XML visualizer uses AvalonEdit to display syntax-highlighted xml. Folding (= node expanding/collapsing) and auto indentation will be implemented.&lt;/p&gt;
&lt;p&gt;&lt;img alt="XML visualizer" src="http://community.sharpdevelop.net/blogs/martinkonicek/images/XmlVisualizer.png" height="372" width="609" /&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=27881" width="1" height="1"&gt;</description></item><item><title>Profiling Unit Tests Made Easy</title><link>http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/2009/09/02/profiling-unit-tests-made-easy.aspx</link><pubDate>Wed, 02 Sep 2009 14:20:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:27766</guid><dc:creator>siegi44</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Although we had basic support for profiling unit tests in the &lt;a href="http://community.sharpdevelop.net/forums/p/9832/27232.aspx#27232"&gt;RC1 of SharpDevelop 3&lt;/a&gt;, it was very hard to use. The reason for this was that the profiler simply attached itself to the NUnit console runner used by SharpDevelop and recorded all calls, even the initialization of NUnit. This produced a large overhead of data.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post3/blogpost1.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;In SharpDevelop 3.1 rev. 4863 I changed the data processor a bit. The profiler now displays all unit tests as root nodes in the &amp;quot;Overview&amp;quot; tab and all NUnit initialization calls are removed from the data.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post3/blogpost2.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;As you can see, it is much easier find the information you need. This also works with multiple tests selected.&lt;/p&gt;
&lt;p&gt;Another feature I thought it could be useful for profiling in general is &amp;quot;Find references&amp;quot;. Simply right-click on a node in the tree view and select &amp;quot;Find references&amp;quot; from the context menu.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post3/blogpost3.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post3/blogpost4.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I hope you like the changes and find it useful. If you have any questions or suggestions, please post them here.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=27766" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/tags/Profiler/default.aspx">Profiler</category></item><item><title>API Changes explained: Language Bindings and Project Bindings</title><link>http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/2009/07/25/api-changes-explained-language-bindings-and-project-bindings.aspx</link><pubDate>Sat, 25 Jul 2009 12:20:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:27199</guid><dc:creator>siegi44</dc:creator><slash:comments>2</slash:comments><description>&lt;p style="font-size:9pt;"&gt;&lt;b&gt;Important note:&lt;/b&gt; The changes discussed in this post apply only to SharpDevelop 4.0.0.4537 and later revisions.&lt;/p&gt;
&lt;h2&gt;Why?&lt;/h2&gt;
&lt;p&gt;As you might have noticed, I am one of the &lt;a href="http://community.sharpdevelop.net/blogs/dsrbecky/archive/2009/04/24/accepted-gsoc-students.aspx"&gt;accepted Google Summer of Code 2009 students&lt;/a&gt;. While working on my project, the XAML binding, I had the idea of implementing an Outline Pad for XAML. After a short discussion with my mentor, we decided to add a general solution for implementing this functionality for C#, VB .NET, Boo, Windows Forms Designer and the (upcoming) WPF Designer too.&lt;/p&gt;
&lt;p&gt;For instance, normal backend bindings like the C#, VB .NET and Boo binding could display a tree of the current document structure with namespaces, classes, member variables, methods properties, etc. This would allow  fast physical restructuring of a file. With XAML you could easily move a part of the XAML tree to another location. Same would go for the Windows Forms and WPF Designer.&lt;/p&gt;
&lt;p&gt;So each language binding or display binding should be able to tell the outline pad what content it should display to the user. The existing &lt;i&gt;ILanguageBinding &lt;/i&gt;only represented a language from the point of view of the project system, there was no support for things like &lt;i&gt;code completion, formatting or highlighting.&lt;/i&gt; So I changed the name of the existing &lt;i&gt;ILanguageBinding &lt;/i&gt;to &amp;quot;IProjectBinding&amp;quot;.&lt;/p&gt;
&lt;h2&gt;The New Language Binding API&lt;/h2&gt;
&lt;p&gt;The new ILanguageBinding is not project-based, but file- or, to be more specific, ITextEditor-based. What does this mean? It simply means, that &lt;b&gt;every &lt;/b&gt;ITextEditor instance (that is, every file opened by the default text editor in SharpDevelop), gets its own ILanguageBinding instance. Furthermore, if you use the split-view functionality present in SharpDevelop, &lt;b&gt;both views get their own ILanguageBinding&lt;/b&gt; instance too. Please keep that in mind, when implementing your own language bindings.&lt;/p&gt;
&lt;p&gt;So let&amp;#39;s move on the practical part: In fact, the &amp;quot;API&amp;quot; only consists of one interface, plus wrappers for the SharpDevelop addin system, to make it easy for backend binding addins to provide their own language-specific implementation. We will discuss its structure first:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;interface&lt;/span&gt;&amp;nbsp;ILanguageBinding&lt;br /&gt;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IFormattingStrategy FormattingStrategy {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#8b4513;"&gt;get&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LanguageProperties Properties {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#8b4513;"&gt;get&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000;"&gt;void&lt;/span&gt;&amp;nbsp;&lt;b&gt;&lt;span style="color:#191970;"&gt;Attach&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;ITextEditor editor);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000;"&gt;void&lt;/span&gt;&amp;nbsp;&lt;b&gt;&lt;span style="color:#191970;"&gt;Detach&lt;/span&gt;&lt;/b&gt;();&lt;br /&gt;}
&lt;/p&gt;
&lt;p&gt;It is not very complex, but there are a few things to keep in mind:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="color:#191970;"&gt;Attach&lt;/span&gt;&lt;/b&gt; is called only once on every ILanguageBinding instance (before any other method calls).&lt;/p&gt;
&lt;p&gt;SharpDevelop will never Detach() and re-Attach() a language binding; instead, it will detach the old binding and attach a new instance. A new instance is created in the following situations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an ITextEditor is created by SharpDevelop,&lt;/li&gt;
&lt;li&gt;the filename, of the file being edited, has changed&lt;/li&gt;
&lt;li&gt;or the user switches to split-view mode.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can attach additional functionality like a custom highlighter or an IOutlineContentHost, to provide content displayed in the Outline pad, as mentioned at the beginning.&lt;/p&gt;
&lt;p&gt;If you override Attach, you should also override &lt;b&gt;&lt;span style="color:#191970;"&gt;Detach&lt;/span&gt;&lt;/b&gt;. It is called only once in the life-cycle of an ILanguageBinding instance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;when &lt;/b&gt;an ITextEditor is closed (disposed by SharpDevelop),&lt;/li&gt;
&lt;li&gt;&lt;b&gt;before &lt;/b&gt;a new language binding is attached, after the filename, of the file being edited, has changed. (So SharpDevelop disposes the old one before creating a new one.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;after &lt;/b&gt;switching from split-view to normal view mode, to dispose the second view, as it is not needed anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You should detach (and dispose) all services and additional functionality, added by your language binding, from the ITextEditor at this point.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;FormattingStrategy &lt;/b&gt;should return an instance of the IFormattingStrategy implementation for your language binding.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Properties &lt;/b&gt;should return a reference to the LanguageProperties implementation for your language binding.&lt;/p&gt;
&lt;h3&gt;Example: XamlLanguageBinding&lt;/h3&gt;
&lt;p&gt;I pasted the Attach and Detach method from the XamlLanguageBinding as a small example. Please note that adding custom syntax highlighting (in this case: XamlColorizer) and additional services, like IOutlineContentHost, requires a reference to the TextView of the AvalonEdit.TextEditor class. So this part can only be implemented for specific text editor controls.&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style="color:#a52a2a;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:#ff0000;"&gt;void&lt;/span&gt;&amp;nbsp;&lt;b&gt;&lt;span style="color:#191970;"&gt;Attach&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;ITextEditor editor)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:#000000;"&gt;base&lt;/span&gt;&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;span style="color:#191970;"&gt;Attach&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;editor);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// try to access the ICSharpCode.AvalonEdit.Rendering.TextView&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// of this ITextEditor&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:#000000;"&gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;.&lt;/span&gt;textView = editor&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style="color:#191970;"&gt;GetService&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="color:#008b8b;"&gt;typeof&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;TextView))&amp;nbsp;&lt;b&gt;&lt;span style="color:#008b8b;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;/b&gt;TextView;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// if editor is not an AvalonEdit.TextEditor&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// GetService returns null&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(textView !=&amp;nbsp;&lt;b&gt;&lt;span style="color:#000000;"&gt;null&lt;/span&gt;&lt;/b&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorizer =&lt;b&gt;&amp;nbsp;&lt;span style="color:#008b8b;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#191970;"&gt;XamlColorizer&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;editor, textView);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// attach the colorizer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textView&lt;span style="color:#006400;"&gt;.&lt;/span&gt;LineTransformers&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style="color:#191970;"&gt;Add&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;colorizer);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// add the XamlOutlineContentHost, which manages the tree view&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textView&lt;span style="color:#006400;"&gt;.&lt;/span&gt;Services&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style="color:#191970;"&gt;AddService&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="color:#008b8b;"&gt;typeof&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;IOutlineContentHost),&amp;nbsp;&lt;b&gt;&lt;span style="color:#008b8b;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#191970;"&gt;XamlOutlineContentHost&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;editor));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style="color:#a52a2a;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:#ff0000;"&gt;void&lt;/span&gt;&amp;nbsp;&lt;b&gt;&lt;span style="color:#191970;"&gt;Detach&lt;/span&gt;&lt;/b&gt;()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:#000000;"&gt;base&lt;/span&gt;&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;span style="color:#191970;"&gt;Detach&lt;/span&gt;&lt;/b&gt;();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// if we added something before&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(textView !=&amp;nbsp;&lt;span style="color:#000000;"&gt;null&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp; colorizer !=&amp;nbsp;&lt;b&gt;&lt;span style="color:#000000;"&gt;null&lt;/span&gt;&lt;/b&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// remove and dispose everything we added&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textView&lt;span style="color:#006400;"&gt;.&lt;/span&gt;LineTransformers&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style="color:#191970;"&gt;Remove&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;colorizer);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textView&lt;span style="color:#006400;"&gt;.&lt;/span&gt;Services&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style="color:#191970;"&gt;RemoveService&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="color:#008b8b;"&gt;typeof&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#006400;"&gt;(&lt;/span&gt;IOutlineContentHost));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorizer&lt;span style="color:#006400;"&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style="color:#191970;"&gt;Dispose&lt;/span&gt;&lt;/b&gt;();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}

&lt;/p&gt;
&lt;h2&gt;Nice, But How Do I Register My Language Binding With SharpDevelop?&lt;/h2&gt;
&lt;p&gt;Similar to all other parts of SharpDevelop, just add it to the addin path /SharpDevelop/Workbench/LanguageBindings like this:&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:#8b008b;"&gt;&amp;lt;Path&amp;nbsp;&lt;span style="color:#ff0000;font-weight:normal;font-style:normal;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;font-weight:normal;font-style:normal;"&gt;&amp;quot;/SharpDevelop/Workbench/LanguageBindings&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#8b008b;"&gt;&amp;lt;LanguageBinding&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:#8b008b;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000;font-weight:normal;font-style:normal;"&gt;id&lt;/span&gt;=&lt;span style="color:#0000ff;font-weight:normal;font-style:normal;"&gt;&amp;quot;XAML&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:#8b008b;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000;font-weight:normal;font-style:normal;"&gt;class&lt;/span&gt;=&lt;span style="color:#0000ff;font-weight:normal;font-style:normal;"&gt;&amp;quot;ICSharpCode.XamlBinding.XamlLanguageBinding&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:#8b008b;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000;font-weight:normal;font-style:normal;"&gt;extensions&lt;/span&gt;=&lt;span style="color:#0000ff;font-weight:normal;font-style:normal;"&gt;&amp;quot;.xaml&amp;quot;&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:#8b008b;"&gt;&amp;lt;/Path&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;short explanation:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;id:&lt;/b&gt; The name of the LanguageBinding, must be unique, preferably the same as your project binding or code completion binding.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;class: &lt;/b&gt;The fully-qualified name of your language binding class.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;extensions: &lt;/b&gt;A semicolon-separated list of file extensions, that are handled by your language binding. Please note that multiple LanguageBindings can handle a file extension. But only the first non-null FormattingStrategy is used or only the first non-null LanguageProperties instance is used. You can control the order of the language bindings using the &lt;i&gt;insertbefore &lt;/i&gt;and &lt;i&gt;insertafter &lt;/i&gt;attributes.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Important:&lt;/b&gt; In the past you were able to register a formatting strategy by adding it to /AddIns/DefaultTextEditor/Formatter/, this was removed. Now the IFormattingStrategy gets set by overriding the FormattingStrategy property in the Language Binding implementation.&lt;/p&gt;
&lt;h3&gt;How To Access The Features From AddIns?&lt;/h3&gt;
&lt;p&gt;When dealing with text displayed inside a SharpDevelop text editor, the easiest way to do this is to use the ITextEditor interface. The active language binding can be accessed by using ITextEditor.Language property.&lt;/p&gt;
&lt;h3&gt;Project Bindings&lt;/h3&gt;
&lt;p&gt;I have not done any changes to the project binding API, except renaming everything. Project bindings are responsible for project management (reading project files, compilation management, etc.). XAML does not need its own project format (there is no .xamlproj ;-)), so I cannot provide an example and explain it to you, please take a look at existing project bindings such as &lt;i&gt;CSharpProjectBinding&lt;/i&gt;, &lt;i&gt;VBNetProjectBinding &lt;/i&gt;or &lt;i&gt;BooProjectBinding&lt;/i&gt;.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I think the language bindings make it easier to extend ITextEditor with language specific features and also allow other AddIns to access  these features. In my next post I will explain my work on the XAML binding more in detail and guide you through the features I implemented.&lt;/p&gt;
&lt;p&gt;If you have any questions concerning language bindings and these changes, please feel free to ask.&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=27199" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/tags/XAML/default.aspx">XAML</category><category domain="http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/tags/GSoC+2009/default.aspx">GSoC 2009</category><category domain="http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/tags/Language+Bindings/default.aspx">Language Bindings</category></item><item><title>Debugger visualizers - a Google summer of code project</title><link>http://community.sharpdevelop.net/blogs/martinkonicek/archive/2009/06/29/first-post.aspx</link><pubDate>Mon, 29 Jun 2009 13:24:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:26945</guid><dc:creator>martinkonicek</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;my name is Martin Konicek and starting this summer, I will be trying to make your debugging experience in SharpDevelop even better. This blog will be about my project for &lt;a href="http://socghop.appspot.com/org/home/google/gsoc2009/sharpdevelop"&gt;Google summer of code 2009&lt;/a&gt; - &lt;b&gt;Debugger visualizers&lt;/b&gt;. The exciting part is that I&amp;#39;ll be working on features that are not present in &lt;i&gt;any&lt;/i&gt; IDE today.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Motivation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The idea is to introduce new ways to let you observe the state of the program during debugging. For me, by far the most used debugger feature are the tooltips. The problem with tooltips is they never show you the data structure &amp;quot;as a whole&amp;quot;. Here we have two objects having a reference to each other:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt="Tooltips are not perfect" src="http://community.sharpdevelop.net/blogs/martinkonicek/images/tooltipProblem.png" width="518" height="459" /&gt;&lt;/p&gt;
&lt;p&gt;As we can see, the tooltips can be expanded forever, even if we have only two objects forming a loop - there is no easy was to tell this information just from the tooltips. Long ago, I was thinking how gain more &lt;i&gt;insight&lt;/i&gt; - what about displaying the objects in memory and references between them as an &lt;b&gt;oriented graph&lt;/b&gt;, updating live when stepping in the debugger? I wrote it as a hobby project, which gave me important lessons how not to do that.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Object graph visualizer&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I found out that SharpDevelop team had similar idea for Google summer of code, great! I applied, researched and wrote a prototype, which I sent to David Srbecky, the author of SharpDevelop debugger and my mentor. The prototype looked like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Object graph visualizer prototype" src="http://community.sharpdevelop.net/blogs/martinkonicek/images/objectGraphPrototypeSmall.png" width="600" height="398" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the picture, the visualizer (right) shows all objects that can be reached from variable &lt;i&gt;&amp;quot;a&amp;quot;&lt;/i&gt; in the program being debugged (left).&lt;/p&gt;
&lt;p&gt;There is one more visualizer that is totally missing in today&amp;#39;s
IDEs in my opinion, and will be implemented. More about that next time.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Bio&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m 23, from the Czech Republic, currently studying CS at Charles University in the beautiful city of Prague. I think .NET is great, I have used it as my primary platform for a couple of years now. I&amp;#39;m teaching basics of programming to freshmen at our university - I recommend this to everyone, it&amp;#39;s a great experience. I have a personal programming blog &lt;a href="http://coding-time.blogspot.com"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Stay tuned for updates..&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=26945" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/martinkonicek/archive/tags/gsoc/default.aspx">gsoc</category></item><item><title>Debugging IronPython Code in SharpDevelop</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/05/30/DebuggingIronPythonCode.aspx</link><pubDate>Sat, 30 May 2009 12:40:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:26587</guid><dc:creator>MattWard</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;With &lt;a href="http://build.sharpdevelop.net/BuildArtefacts/"&gt;
    SharpDevelop 3.1&lt;/a&gt; you can now debug IronPython code with the 
    IronPython Interpreter (ipy.exe).&lt;/p&gt;
&lt;p&gt;Before you start make sure the debugger is set to use the 
    &lt;b&gt;Just My Code&lt;/b&gt; feature. From the Tools menu select Options and 
    then click the Debugging category.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Debugger options for debugging IronPython code" src="http://community.sharpdevelop.net/photos/mattward/images/original/DebuggingOptionsWhenDebuggingIronPythonCode.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Ensure that the &lt;b&gt;Just My Code&lt;/b&gt; feature is checked and that 
    the &lt;b&gt;Step over code without symbols&lt;/b&gt; is not checked. If the 
    Step over code without symbols option is selected then stepping 
    will not work properly and lines of code will be skipped over.&lt;/p&gt;
&lt;p&gt;There are two ways to debug your code. You can use the Python 
    menu or modify the project options. We will look at both of these 
    alternatives. First open your IronPython project into SharpDevelop. 
    Open your main file and make sure it is the active text editor 
    window. Set a breakpoint somewhere in your code. Then from the 
    Python menu select Run.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Python menu option to run with debugger" src="http://community.sharpdevelop.net/photos/mattward/images/original/PythonRunWithDebuggerMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;This will start ipy.exe which will run your code and the 
    debugger should stop the execution at the breakpoint.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Debugging IronPython code" src="http://community.sharpdevelop.net/photos/mattward/images/original/DebuggingIronPythonCode.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;From this point you can do the usual debugging activities such 
    as stepping through your code, viewing the callstack, adding items 
    to the watch window, etc.&lt;/p&gt;
&lt;p&gt;If you want to use a different ipy.exe then this can be 
    specified in the Python Options dialog (Tools menu | Options).&lt;/p&gt;
&lt;p&gt;&lt;img alt="Python options dialog" src="http://community.sharpdevelop.net/photos/mattward/images/original/PythonToolsOptionsDialog.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;To enable debugging when you press F5 or select the Debug Run 
    menu option you can modify the project options. From the Projects 
    menu select Project Options and then open the Debug tab. Here you 
    should change the Start Action to &lt;b&gt;Start external program&lt;/b&gt; and 
    use the browse button to locate ipy.exe. In the Start Options add 
    the following command line arguments, changing the name of your 
    main file as required.&lt;/p&gt;
&lt;pre&gt;-D ${ProjectDir}\Program.py&lt;/pre&gt;
&lt;p&gt;Once these changes are saved you can then press F5 and ipy.exe 
    will be run under the debugger instead of running the compiled 
    executable.3&lt;/p&gt;
&lt;h2&gt;Issues&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No support for debugging the executable produced by the 
      IronPython compiler since it does not produce debug symbols (i.e. 
      .pdb files).&lt;/li&gt;
&lt;li&gt;
        When using ipy.exe you need to add references to .NET 
        assemblies explicitly in your code except for System which is 
        included by default. For example:
&lt;pre&gt;import clr &lt;br /&gt;clr.AddReference(&amp;quot;System.Windows.Forms&amp;quot;) &lt;br /&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Thanks&lt;/h2&gt;
&lt;p&gt;Thanks to 
    &lt;a href="http://community.sharpdevelop.net/blogs/dsrbecky/"&gt;David 
    Srbecky&lt;/a&gt;, SharpDevelop&amp;#39;s debugger expert and maintainer, 
    for reviewing the code changes I wanted to make to the debugger and 
    making sure nothing was broken. Adding support for debugging 
    IronPython was straightforward and required 10-15 lines of new code 
    thanks to the code already written by David.&lt;/p&gt;
&lt;p&gt;Thanks also to &lt;a href="http://devhawk.net/"&gt;Harry Pierson&lt;/a&gt; 
    (IronPython Program Manager at Microsoft) who has written a great 
    set of blog posts on 
    &lt;a href="http://devhawk.net/CategoryView,category,Debugger.aspx"&gt;
    creating an IronPython debugger in IronPython&lt;/a&gt; which gave me the 
    reason why SharpDevelop&amp;#39;s debugger was not working when 
    debugging IronPython code.&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=26587" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Python/default.aspx">Python</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronPython/default.aspx">IronPython</category></item><item><title>IronPython 2.0 Forms Designer</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/05/12/IronPython2FormsDesigner.aspx</link><pubDate>Tue, 12 May 2009 19:50:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:26404</guid><dc:creator>MattWard</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Support for designing Windows Forms in IronPython is now 
    available in SharpDevelop 3.1. The 
    &lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2007/10/21/IronPythonIntegrationInSharpDevelop22.aspx"&gt;
    original IronPython forms designer&lt;/a&gt; was removed when 
    SharpDevelop 3.0 began supporting 
    &lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython 2.0&lt;/a&gt; 
    which had removed support for generating IronPython code from 
    &lt;a href="http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx"&gt;
    Microsoft&amp;#39;s CodeDOM&lt;/a&gt;. The forms designer has now been 
    re-implemented to use the IronPython 
    &lt;a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree"&gt;
    abstract syntax tree&lt;/a&gt; (AST) and no longer relies on the 
    CodeDOM.  &lt;/p&gt;
&lt;h2&gt;Creating a Windows Application&lt;/h2&gt;
&lt;p&gt;To create a Windows Application open up the new project dialog 
    by selecting &lt;b&gt;New&lt;/b&gt; then &lt;b&gt;Solution&lt;/b&gt; from the &lt;b&gt;File&lt;/b&gt; 
    menu. Select the Python category to show the available project 
    templates. Select the Windows Application project template, enter a 
    name and location and click the Create button.&lt;/p&gt;
&lt;p&gt;&lt;img alt="New Python Project Dialog" src="http://community.sharpdevelop.net/photos/mattward/images/original/NewPythonWinFormsProject.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Designing Windows Forms&lt;/h2&gt;
&lt;p&gt;The Windows Forms designer is not yet complete so be warned that 
    it could generate form code that will no longer compile.&lt;/p&gt;
&lt;p&gt;The designer can be opened by opening a form in the text editor 
    and selecting the Design tab at the bottom of the editor.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Python main form before opening the designer" src="http://community.sharpdevelop.net/photos/mattward/images/original/PythonMainFormBeforeOpeningInDesigner.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Once open in the designer you can add controls to the form by 
    dragging the controls from the Tools window. In the screenshot 
    below a label, text box and a button have been added.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Main form designed in designer" src="http://community.sharpdevelop.net/photos/mattward/images/original/PythonMainFormInDesigner.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Click the Source tab at the bottom of the editor to view the 
    generated code in the InitializeComponents method.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Generated form code" src="http://community.sharpdevelop.net/photos/mattward/images/original/PythonMainFormGeneratedCode.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Limitations&lt;/h2&gt;
&lt;p&gt;The IronPython forms designer is not yet complete and the 
    following are some of the known limitations.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No support for project or local form resources.&lt;/li&gt;
&lt;li&gt;No support for icons.&lt;/li&gt;
&lt;li&gt;Incomplete support for ToolStripItems and menu strips.&lt;/li&gt;
&lt;li&gt;Incomplete support for ListViewItems.&lt;/li&gt;
&lt;li&gt;No support for TreeViewItems.&lt;/li&gt;
&lt;li&gt;Incomplete support for non-visual components (e.g. 
      Timers).&lt;/li&gt;
&lt;li&gt;Controls needed to be fully namespace qualified.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Forms Designer Internals&lt;/h2&gt;
&lt;p&gt;For those interested in how the forms designer actually works at 
    a high level we will now look at what the IronPython forms designer 
    does when loading and then generating code for a form. &lt;/p&gt;
&lt;p&gt;To show the form in the designer the following steps are 
    executed.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The form&amp;#39;s code is parsed and an IronPython AST 
      (PythonAst object) is created.&lt;/li&gt;
&lt;li&gt;The AST is then visited and each control is added to the 
      forms designer and the control&amp;#39;s properties are set.&lt;/li&gt;
&lt;li&gt;The form&amp;#39;s properties are set in the designer and the 
      form is displayed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To generate the code after the form has been designed the 
    following steps are executed.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The form is obtained from the forms designer.&lt;/li&gt;
&lt;li&gt;Each of the child components of the form have their 
      properties checked to see if they need to be serialized. This can 
      be done by getting all the 
      &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor.getproperties.aspx"&gt;
      property descriptors&lt;/a&gt; and then checking the 
      &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.propertydescriptor.shouldserializevalue.aspx"&gt;
      ShouldSerializeValue&lt;/a&gt; method. If they do need to be serialized 
      then code is generated for them and added to a StringBuilder.&lt;/li&gt;
&lt;li&gt;After all the child components are added the code for the 
      form is generated.&lt;/li&gt;
&lt;li&gt;Finally the generated code is inserted into the text editor 
      inside the InitializeComponent method, replacing any existing 
      code.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=26404" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Python/default.aspx">Python</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronPython/default.aspx">IronPython</category></item><item><title>Converting C# and VB.NET Code to IronPython</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/05/11/ConvertingCSharpVBNetCodeToIronPython.aspx</link><pubDate>Mon, 11 May 2009 19:07:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:26394</guid><dc:creator>MattWard</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;SharpDevelop 3.1 now supports converting C# and VB.NET code to 
    IronPython. It can convert a single file or an entire project. The 
    code to convert between these languages is still under development 
    and has some limitations. &lt;/p&gt;
&lt;h2&gt;Converting an Individual File&lt;/h2&gt;
&lt;p&gt;To convert a C# or VB.NET file, open it in SharpDevelop&amp;#39;s 
    text editor, then from &lt;b&gt;Tools&lt;/b&gt; menu select &lt;b&gt;Convert code to 
    Python&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Convert code to Python menu option." src="http://community.sharpdevelop.net/photos/mattward/images/original/ConvertCodeToPythonMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;The code conversion is limited to converting classes so it will 
    not convert an arbitary piece of code that is not inside a 
    class.&lt;/p&gt;
&lt;p&gt;&lt;img alt="C# code before conversion." src="http://community.sharpdevelop.net/photos/mattward/images/original/CSharpCodeBeforeConversionToPython.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="C# code after conversion to Python" src="http://community.sharpdevelop.net/photos/mattward/images/original/ConvertedCSharpClassAsPython.aspx" /&gt;&lt;/p&gt;
&lt;h2&gt;Converting a Project&lt;/h2&gt;
&lt;p&gt;To convert a C# or VB.NET project, open it in SharpDevelop, then 
    from the &lt;b&gt;Project&lt;/b&gt; menu select &lt;b&gt;Convert From C# to 
    Python&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Convert from C# project to Python project menu option." src="http://community.sharpdevelop.net/photos/mattward/images/original/ProjectConvertFromCSharpToPythonMenuItem.aspx" /&gt;&lt;/p&gt;
&lt;p&gt;Once converted the project will most likely not compile straight 
    away due to limitations in the implementation. At the time of 
    writing converting a project has the following limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project&amp;#39;s Main File is not set.&lt;/li&gt;
&lt;li&gt;No code generated to call the project&amp;#39;s Main entry 
      method.&lt;/li&gt;
&lt;li&gt;Namespace imports do include all the used classes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Code Conversion Internals&lt;/h2&gt;
&lt;p&gt;Converting code to IronPython was originally supported in 
    &lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2007/10/21/IronPythonIntegrationInSharpDevelop22.aspx"&gt;
    SharpDevelop 2.2&lt;/a&gt; and was based on converting code to a 
    &lt;a href="http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx"&gt;
    Microsoft CodeDOM&lt;/a&gt; and then getting IronPython 1.0 to generate 
    the Python code. In IronPython 2.0 this CodeDOM support was removed 
    so the code conversion feature was removed from SharpDevelop 3.0 
    since that was using IronPython 2.0. In SharpDevelop 3.1 the code 
    conversion has been rewritten to no longer use the CodeDOM support. 
    It now works by executing the following simple steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The C# or VB.NET code is parsed using SharpDevelop&amp;#39;s 
      parsing library 
      &lt;a href="http://laputa.sharpdevelop.net/NRefactoryTutorialVideo.aspx"&gt;
      NRefactory&lt;/a&gt; and an 
      &lt;a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree"&gt;
      abstract syntax tree (AST)&lt;/a&gt; is generated.&lt;/li&gt;
&lt;li&gt;A &lt;a href="http://en.wikipedia.org/wiki/Visitor_pattern"&gt;
      visitor&lt;/a&gt; class then walks this AST and generates Python code 
      which is added to a StringBuilder.&lt;/li&gt;
&lt;li&gt;Once the visit is complete the generated Python code is then 
      displayed or saved to disk.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=26394" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Python/default.aspx">Python</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronPython/default.aspx">IronPython</category></item><item><title>NUnit 2.5 Support</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/05/10/NUnit25Support.aspx</link><pubDate>Sun, 10 May 2009 16:46:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:26381</guid><dc:creator>MattWard</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;SharpDevelop 3.1 now supports &lt;a href="http://nunit.org"&gt;NUnit 
    2.5&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A summary of which NUnit version is supported by SharpDevelop is 
    shown in the table below.&lt;/p&gt;
&lt;table class="article "&gt;

&lt;tr&gt;
&lt;td&gt;SharpDevelop 3.1&lt;/td&gt;
&lt;td&gt;NUnit 2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SharpDevelop 3.0&lt;/td&gt;
&lt;td&gt;NUnit 2.4.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SharpDevelop 2.2.1&lt;/td&gt;
&lt;td&gt;NUnit 2.4.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SharpDevelop 1.1&lt;/td&gt;
&lt;td&gt;NUnit 2.2&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;h2&gt;NUnit 2.5 Changes&lt;/h2&gt;
&lt;p&gt;NUnit 2.5 has changed quite substantially compared with the 
    previous 2.4.8 release, as outlined in the 
    &lt;a href="http://nunit.com/index.php?p=releaseNotes&amp;amp;r=2.5"&gt;NUnit 
    2.5 release notes&lt;/a&gt;. The problems that we had when migrating 
    SharpDevelop&amp;#39;s unit tests to NUnit 2.5 were as follows.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Assert.IsInstanceOfType has been replaced by 
        Assert.IsInstanceOf.&lt;/b&gt;
&lt;p&gt;Your code will still compile and work if 
        Assert.IsInstanceOfType is used but you will get compiler 
        warnings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NUnit.Framework.SyntaxHelpers namespace no longer exists.&lt;/b&gt;
&lt;p&gt;All classes that were in this namespace have been moved to 
        the NUnit.Framework namespace.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The Has.Count constraint no longer takes an integer 
        parameter.&lt;/b&gt;
&lt;p&gt;To fix this problem replace code such as:&lt;/p&gt;
&lt;pre&gt;Assert.That(classesCollection, Has.Count(1));&lt;/pre&gt;
&lt;p&gt;With the following:&lt;/p&gt;
&lt;pre&gt;Assert.That(classesCollection.Has.Count.EqualTo(1));&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Overriding a [TestFixtureSetUp] method in a derived class 
        using the new keyword no longer works.&lt;/b&gt;
&lt;p&gt;Some of the SharpDevelop unit tests were overriding an 
        abstract base test class [TestFixtureSetUp] method in a derived 
        class by using the new keyword, as shown below.&lt;/p&gt;
&lt;p&gt;Base class:&lt;/p&gt;
&lt;pre&gt;[TestFixtureSetUp] &lt;br /&gt;public void SetUpFixture()  &lt;br /&gt;{ &lt;br /&gt;    // Setup code. &lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Derived class:&lt;/p&gt;
&lt;pre&gt;[TestFixtureSetUp] &lt;br /&gt;public new void SetUpFixture()  &lt;br /&gt;{     &lt;br /&gt;    // Extra setup code. &lt;br /&gt;    base.SetUpFixture(); &lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;In NUnit 2.4.8 the SetUpFixture method in the derived class 
        would be called when running the tests allowing it to execute 
        some extra setup steps. In NUnit 2.5 the base class 
        SetUpFixture method is called instead and the derived class 
        method is never called. To resolve the problem we changed the 
        base class so it used a virtual method and allowed the derived 
        class to override this to execute its extra setup steps.&lt;/p&gt;
&lt;p&gt;Base class:&lt;/p&gt;
&lt;pre&gt;[TestFixtureSetUp] &lt;br /&gt;public void SetUpFixture()  &lt;br /&gt;{ &lt;br /&gt;    BeforeSetUpFixture(); &lt;br /&gt;    // Setup code. &lt;br /&gt;} &lt;br /&gt; &lt;br /&gt;public virtual void BeforeSetUpFixture() &lt;br /&gt;{ &lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Derived class:&lt;/p&gt;
&lt;pre&gt;public override void BeforeSetUpFixture() &lt;br /&gt;{ &lt;br /&gt;     // Extra setup code. &lt;br /&gt;}&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=26381" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/UnitTests/default.aspx">UnitTests</category></item><item><title>Accepted GSoC students</title><link>http://community.sharpdevelop.net/blogs/dsrbecky/archive/2009/04/24/accepted-gsoc-students.aspx</link><pubDate>Fri, 24 Apr 2009 16:11:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:26166</guid><dc:creator>DavidSrbecky</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;These projects have been accepted into SharpDevelop. You can learn more about each project by visiting the links below.&lt;/p&gt;

&lt;table&gt;


&lt;tr align="left"&gt;
  &lt;th align="right"&gt;Student&lt;/th&gt;
  &lt;th&gt;Title&lt;/th&gt;
  &lt;th&gt;Mentor&lt;/th&gt;
&lt;/tr&gt;

      
&lt;tr&gt;
  &lt;td align="right"&gt;&lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/sharpdevelop/t124024869351"&gt;Siegfried Pammer&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;XAML code completion for SharpDevelop&lt;/td&gt;
  &lt;td&gt;Bernhard Spuida&lt;/td&gt;
&lt;/tr&gt;

      
&lt;tr&gt;
  &lt;td align="right"&gt;&lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/sharpdevelop/t124024869810"&gt;Philipp Maihart&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Application &amp;quot;Database Tools Add-In&amp;quot;&lt;/td&gt;
  &lt;td&gt;Peter Forstmeier&lt;/td&gt;
&lt;/tr&gt;

      
&lt;tr&gt;
  &lt;td align="right"&gt;&lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/sharpdevelop/t124024870142"&gt;Martin Konicek&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Debugger visualizer for SharpDevelop&lt;/td&gt;
  &lt;td&gt;David Srbecky&lt;/td&gt;
&lt;/tr&gt;

      
&lt;tr&gt;
  &lt;td align="right"&gt;&lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/sharpdevelop/t124024870746"&gt;Sergej Andrejev&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Common keyboard shortcuts handling and management in SharpDevelop&lt;/td&gt;
  &lt;td&gt;Matt Ward&lt;/td&gt;
&lt;/tr&gt;

      
&lt;tr&gt;
  &lt;td align="right"&gt;&lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/sharpdevelop/t124024871345"&gt;Tomasz Tretkowski&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Integration of C++/CLI&lt;/td&gt;
  &lt;td&gt;Daniel Grunwald&lt;/td&gt;
&lt;/tr&gt;


&lt;/table&gt;

&lt;p&gt;&lt;br /&gt;Our goals for GSoC 2009 are simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;provide students with a learning experience in advanced .net application programming&lt;/li&gt;
&lt;li&gt;motivate students to become long term contributors&lt;/li&gt;
&lt;li&gt;improve SharpDevelop in code areas the core team does not have time to work on currently&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We look forward to having a great experience with all involved.&lt;/p&gt;
&lt;p&gt;And don&amp;#39;t worry, even if you were not selected for one of the slots available, we value your efforts and thoughts. If you want to contribute to SharpDevelop nevertheless, you are welcome and also will receive our support. Of course, there won&amp;#39;t be money involved, but if you enjoy coding as much as we do, we will be glad to help and mentor you - just drop us a line to let us know and we will be there for you. If you don&amp;#39;t, we look forward to seeing you around again in the next GSoC.&lt;/p&gt;
&lt;p&gt;Thanks for all your applications and great project proposals. It is wonderful for us to see what you are thinking and planning.&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=26166" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/dsrbecky/archive/tags/GSoC/default.aspx">GSoC</category></item><item><title>Merging of Calls – Pinpointing Interesting Methods</title><link>http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/2009/04/13/merging-of-calls-pinpointing-interesting-methods.aspx</link><pubDate>Mon, 13 Apr 2009 12:20:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:26087</guid><dc:creator>siegi44</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;As mentioned in the previous post, SharpDevelop 3.1 will contain a built-in profiler.&lt;br /&gt;&lt;br /&gt;Today we&amp;#39;ll talk about what data the profiler collects, and what exactly &amp;quot;merging&amp;quot; is.&lt;br /&gt;&lt;br /&gt;We’ll use the following sample program for exploring the topic:&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Threading;&lt;br /&gt;&lt;br /&gt;namespace ICSharpCode.Profiler.Example1&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; static void DoCalculation(bool doLotsOfWork) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (doLotsOfWork) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int target = Environment.TickCount + 1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (Environment.TickCount &amp;lt; target) { }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.Sleep(100);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; static void SomeMethod() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DoCalculation(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; static void SomeOtherMethod() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DoCalculation(false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SomeMethod();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SomeOtherMethod();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SomeMethod and SomeOtherMethod take the same amount of time, but for different reasons.&lt;br /&gt;&lt;br /&gt;If we simply store timing information per method, it would seem that DoCalculation spends 50% of the time in get_TickCount and 50% in Thread.Sleep.&lt;br /&gt;&lt;br /&gt;But a good profiler should be able to show that only the invocations of SomeMethod spend their time in get_TickCount, whereas SomeOtherMethod ends up spending time in Thread.Sleep.&lt;br /&gt;&lt;br /&gt;Or, assume you have a program with a textbox and a button. You click on the button, then change the text (input to the program) and then run the button code again. The other input might mean that the performance characteristics of the button method change dramatically - so ideally, we should be able to view each click separately.&lt;br /&gt;&lt;br /&gt;What data does the profiler have to collect to do this? The easiest solution would be to record all function calls. For each function call, store the function ID, the call start time, and the call end time.&lt;br /&gt;&lt;br /&gt;That way, we don&amp;#39;t lose any data; we can reconstruct the application&amp;#39;s stack at every point in time.&lt;br /&gt;Of course, if you are looking into a performance issue, you don&amp;#39;t want to look at individual stack traces - you want a little more overview. Or expressed for our textbox/button example: It is nice to be able to separately view the data for each button click; but initially, you&amp;#39;ll want to look at all data at once.&lt;br /&gt;&lt;br /&gt;Now we get to our data model: when you&amp;#39;re using the SharpDevelop profiler, you&amp;#39;re dealing with &amp;quot;merged&amp;quot; sets of individual calls. Instead of seeing a single call stack, you&amp;#39;ll see the tree of all call stacks.&lt;br /&gt;&lt;br /&gt;For our example code, this looks like in the following screenshot:&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post2/screen1.png" alt="" width="" align="" border="" height="" hspace="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Note that the ten calls to DoCalculation inside SomeOtherMethod were merged into a single node in the tree view (a &amp;quot;merged&amp;quot; call). In this view, you are not able to view an individual call&amp;#39;s timing data, only the sum of all individual times. However, the DoCalculation call inside SomeMethod and that in SomeOtherMethod are still separate, as these have different call stacks.&lt;br /&gt;&lt;br /&gt;If you want to view them together, select both calls and use Right Click &amp;gt; Merge.&lt;br /&gt;&lt;br /&gt;A new tree will open with all 11 calls merged together:&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post2/screen2.png" alt="" width="" align="" border="" height="" hspace="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;No matter whether we&amp;#39;re dealing with multiple calls after each other, or with calls in different positions in the tree, it&amp;#39;s always the same operation: merging. You can even merge calls of different functions together - though unless the functions do similar things, you won&amp;#39;t get useful results.&lt;br /&gt;&lt;br /&gt;For example, here you can see SomeMethod and SomeOtherMethod merged together:&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post2/screen3.png" alt="" width="" align="" border="" height="" hspace="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Note that merging functions also merges their children (grouped by function name).&lt;/p&gt;&lt;p&gt;Now it&amp;#39;s pretty clear what the timeline control above does: the profiler takes all root nodes from all stack traces in the selected time span, and merges nodes belonging to the same thread.&lt;/p&gt;&lt;p&gt;However, naïvely storing every function call individually takes a lot of space - &lt;b&gt;about 7 GB (!)&lt;/b&gt; for SharpDevelop starting and opening its own solution (SharpDevelop.sln). That&amp;#39;s why the profiler limits you to selecting start and end positions for the time spans with a granularity of about 500ms: during profiling, the profiler hook merges the calls into data sets of about 500ms.&lt;/p&gt;&lt;p&gt;We never actually create the &amp;quot;function start,end&amp;quot;-entries proposed above, but directly build a merged representation as the profiler runs. That way we dramatically reduce the size of the profiler output: &lt;b&gt;only 198 MB&lt;/b&gt; for SharpDevelop starting and opening its own solution.&lt;/p&gt;&lt;p&gt;In the next post we will give you a brief overview of all the other commands you can access in the context menu of each call and how to use them.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=26087" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/tags/Profiler/default.aspx">Profiler</category></item><item><title>Introducing a New Tool in SharpDevelop – The Profiler</title><link>http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/2009/04/04/introducing-a-new-tool-in-sharpdevelop-the-profiler.aspx</link><pubDate>Sat, 04 Apr 2009 16:43:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:25997</guid><dc:creator>siegi44</dc:creator><slash:comments>0</slash:comments><description>Nearly one year ago, we started building a new tool for SharpDevelop: a profiler. It will make
it easier to analyze and improve the performance of applications developed
using SharpDevelop. In the next few weeks we are going to give you an overview
of all the different aspects of the profiler, its usage and we will shed some
light on its implementation and technical details.
&lt;h2&gt;Using the Profiler&lt;/h2&gt;
&lt;p&gt;To start a new profiler session just go to “Quality Tools” &amp;gt; “Profiler” and then you
can decide whether to profile the currently opened project or you can select a
program to run.&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post1/menu.png" alt="" width="533" align="" border="" height="130" hspace="" /&gt; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;During execution of the application, performance data is collected. On program end,
SharpDevelop will automatically open up the session and display the collected
data.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://community.sharpdevelop.net/blogs/siegfried_pammer/profiler/post1/view.png" alt="" width="865" align="" border="" height="491" hspace="" /&gt;&lt;/p&gt;

&lt;p&gt;In the “Overview” tab, all threads and all calls are listed. In the “Top 20” tab 20 methods, in which most time is spent during run time, are listed. On the right side you can see
the ring diagram. The concept of the ring diagram was taken from the Ubuntu “Disk
Usage Analyzer”. It can be used to easily navigate to deep levels of the call
tree. Just click on a call to move there. If you want to go back to the call
you had selected before, just click inside the gray circle in the middle.&lt;/p&gt;

&lt;p&gt;To show details on a call in the ring diagram simply move the mouse over it and a tool
tip with important information will be displayed. The gray circle represents
the call currently selected in the tree view. The innermost ring is a pie chart
showing the children of the selected call. The size of each piece is
proportional to the time spent inside that call. The other rings represent the
deeper levels of the call tree.&lt;/p&gt;

&lt;p&gt;In the next post we will show you the “merge” feature, which allows you to view multiple
parts of the call tree at once. The “merge” feature is used by the “Top 20” tab
and the timeline too.&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=25997" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/siegfried_pammer/archive/tags/Profiler/default.aspx">Profiler</category></item><item><title>GSOC proposals</title><link>http://community.sharpdevelop.net/blogs/laputa/archive/2009/04/04/gsoc-proposals.aspx</link><pubDate>Sat, 04 Apr 2009 00:16:03 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:25999</guid><dc:creator>Laputa</dc:creator><slash:comments>0</slash:comments><description>The time to send in proposals for Google Summer Of Code is over now. Now we&amp;#39;re busy reading your proposals and trying to decide on a ranking. This is a lot more work than I initially expected - we got lots of proposals during the last three days. Unfortunately, most of the late proposals were of a rather low quality. In total, we got 44 proposals from 34 students - much more than I expected. Here&amp;#39;s the list of topics proposals were written on. As you can see, most of them come straight from...(&lt;a href="http://community.sharpdevelop.net/blogs/laputa/archive/2009/04/04/gsoc-proposals.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=25999" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/laputa/archive/tags/Daniel/default.aspx">Daniel</category></item><item><title>Subversion 1.6</title><link>http://community.sharpdevelop.net/blogs/laputa/archive/2009/04/03/subversion-1-6.aspx</link><pubDate>Fri, 03 Apr 2009 20:20:24 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:25990</guid><dc:creator>Laputa</dc:creator><slash:comments>0</slash:comments><description>In SharpDevelop 3.1.0.3948, I changed our Subversion integration to use SharpSVN instead of SvnDotNet . SharpSVN exposes more Subversion APIs to managed code, which could result in some nice features in the (far) future - for example, &amp;quot;SVN Diff&amp;quot; right inside the text editor. But the main reason for the upgrade was that SharpSVN supports Subversion 1.6. If you are using TortoiseSVN 1.6, you need to update to SharpDevelop 3.1 . The old SvnDotNet does not work with new working copies. However...(&lt;a href="http://community.sharpdevelop.net/blogs/laputa/archive/2009/04/03/subversion-1-6.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=25990" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/laputa/archive/tags/Daniel/default.aspx">Daniel</category></item><item><title>GSoC 2009</title><link>http://community.sharpdevelop.net/blogs/laputa/archive/2009/03/24/gsoc-2009.aspx</link><pubDate>Tue, 24 Mar 2009 13:42:01 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:25766</guid><dc:creator>Laputa</dc:creator><slash:comments>0</slash:comments><description>David wrote a blog post on our participation in the GSoC 2009 . It refers to the GSoC 2009 Wiki entry where the mentors have posted a few ideas (yes, we actively encourage students to come up with their own!). As I am the program manager, I am not active as a mentor, but I sure do have an opinion... here are my top five projects when it comes to &amp;quot;visibility&amp;quot; (a feature that will be used by a large percentage of our user base): The database scout / database api / EDM designer (we already...(&lt;a href="http://community.sharpdevelop.net/blogs/laputa/archive/2009/03/24/gsoc-2009.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=25766" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/laputa/archive/tags/Chris/default.aspx">Chris</category></item><item><title>SharpDevelop and the Google Summer of Code 2009</title><link>http://community.sharpdevelop.net/blogs/dsrbecky/archive/2009/03/24/gsoc2009.aspx</link><pubDate>Tue, 24 Mar 2009 02:09:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:25755</guid><dc:creator>DavidSrbecky</dc:creator><slash:comments>10</slash:comments><description>&lt;p&gt;&lt;a href="http://www.icsharpcode.net/OpenSource/SD/" target="_blank"&gt;SharpDevelop&lt;/a&gt; is participating in the &lt;a href="http://code.google.com/soc/"&gt;Google Summer of Code&lt;/a&gt; this year. &lt;/p&gt;&lt;p&gt;It is an opportunity for students to earn &lt;b&gt;4500 USD&lt;/b&gt; over the summer by working on an open-source project.&lt;/p&gt;&lt;p&gt;We have created a list of ideas, but you can work basically on anything you want as long as it is relevant to SharpDevelop.&amp;nbsp; You can find the list of ideas and any further information on the &lt;a href="http://wiki.sharpdevelop.net/gsoc.ashx"&gt;SharpDevelop wiki page for the Google Summer of Code&lt;/a&gt;.&amp;nbsp; You can &lt;a href="http://socghop.appspot.com/student/apply/google/gsoc2009"&gt;submit your application here&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;If you are not a student or if you do not have enough spare time, you can benefit as well.... share your ideas with us and maybe some student will pick them up and implement them.&lt;/p&gt;&lt;p&gt;Feel free to contact us on the &lt;a href="http://community.sharpdevelop.net/forums/"&gt;forums&lt;/a&gt; or via &lt;a href="mailto:gsoc@icsharpcode.net"&gt;email&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Please spread the word and tell your friends about the Summer of Code... &lt;br /&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=25755" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/dsrbecky/archive/tags/Mono/default.aspx">Mono</category><category domain="http://community.sharpdevelop.net/blogs/dsrbecky/archive/tags/GSoC/default.aspx">GSoC</category></item><item><title>Using the Python Standard Library</title><link>http://community.sharpdevelop.net/blogs/mattward/archive/2009/03/01/UsingPythonStandardLibrary.aspx</link><pubDate>Sun, 01 Mar 2009 14:43:00 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:25410</guid><dc:creator>MattWard</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Here is a short walkthrough on how to use the 
    &lt;a href="http://docs.python.org/library/"&gt;Python Standard 
    Library&lt;/a&gt; with 
    &lt;a href="http://www.sharpdevelop.net/OpenSource/SD/Download/"&gt;
    SharpDevelop 3.0&lt;/a&gt; and IronPython 2.0.&lt;/p&gt;&lt;h2&gt;Prerequisites&lt;/h2&gt;&lt;p&gt;You will need to have SharpDevelop 3.0 and Python 2.5 installed 
    on your machine. These can be downloaded from the following 
    locations.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sharpdevelop.net/OpenSource/SD/Download/#SharpDevelop30"&gt;SharpDevelop 
      3.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.python.org/download/releases/2.5.4/"&gt;Python 
      2.5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Note that using Python 2.6 is not supported. The following 
    section assumes that Python 2.5 was installed into the C:\Python25 
    folder.&lt;/p&gt;&lt;h2&gt;Using the Python Standard Library&lt;/h2&gt;&lt;p&gt;First we will create an IronPython console application in 
    SharpDevelop. From the &lt;b&gt;File&lt;/b&gt; menu select &lt;b&gt;New&lt;/b&gt; and then 
    &lt;b&gt;Solution&lt;/b&gt;. In the New Project window select the &lt;b&gt;Python&lt;/b&gt; 
    category and select the &lt;b&gt;Console Application&lt;/b&gt; template.&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/photos/mattward/images/original/NewPythonConsoleProject.aspx" alt="New Python Console Application template" /&gt;&lt;/p&gt;&lt;p&gt;Give the project a name, select its location and click the 
    &lt;b&gt;Create&lt;/b&gt; button.&lt;/p&gt;&lt;p&gt;To use the Python Standard Library the project needs a reference 
    to IronPython.dll, which should be added by default, and a 
    reference to IronPython.Modules.dll. Open the &lt;b&gt;Projects&lt;/b&gt; 
    window, if it is not already open, by selecting &lt;b&gt;Projects&lt;/b&gt; 
    from the &lt;b&gt;View&lt;/b&gt; menu. Right click the project&amp;#39;s 
    references and select &lt;b&gt;Add Reference&lt;/b&gt;. In the &lt;b&gt;Add 
    Reference&lt;/b&gt; dialog first add a reference to &lt;b&gt;mscorlib&lt;/b&gt;, this 
    reference is needed since we are going to use the 
    System.Console class to pause the console output. Then select the 
    &lt;b&gt;.NET Assembly Browser&lt;/b&gt; tab and click the &lt;b&gt;Browse&lt;/b&gt; 
    button. Locate the IronPython.Modules.dll file and select it. This 
    file should be in the following folder:&lt;/p&gt;&lt;p&gt;C:\Program 
    Files\SharpDevelop\3.0\AddIns\AddIns\BackendBindings\PythonBinding&lt;/p&gt;&lt;p&gt;Click OK to close the Add Reference dialog.&lt;/p&gt;&lt;p&gt;In the Program.py file change the code to the following:&lt;/p&gt;&lt;pre&gt;# Add Python Standard Library to search path. &lt;br /&gt;import sys &lt;br /&gt;sys.path.append(&amp;quot;c:\python25\lib&amp;quot;) &lt;br /&gt; &lt;br /&gt;# Use Python Standard Library os module. &lt;br /&gt;import os &lt;br /&gt;print os.getcwd() &lt;br /&gt; &lt;br /&gt;# Wait for a key press before closing the console window. &lt;br /&gt;import System &lt;br /&gt;print &amp;quot;Press any key to continue...&amp;quot; &lt;br /&gt;System.Console.ReadKey(True) &lt;/pre&gt;&lt;p&gt;The sys.path.append line adds the Python Standard Library to the 
    search path. After that the os module is imported and the os.getcwd 
    method is called to get the current working directory and this is 
    output to the console window. The last three lines of code are just 
    used to pause the console window so we can see the output.&lt;/p&gt;&lt;p&gt;Compile the above code by selecting &lt;b&gt;Build Solution&lt;/b&gt; from 
    the &lt;b&gt;Build&lt;/b&gt; menu.&lt;/p&gt;&lt;p&gt;Finally run the application by selecting &lt;b&gt;Run&lt;/b&gt; from the 
    &lt;b&gt;Debug&lt;/b&gt; menu.&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.sharpdevelop.net/photos/mattward/images/original/PythonConsoleAppOutputWindow.aspx" alt="Output from Python Console application." /&gt;&lt;/p&gt;&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=25410" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/Python/default.aspx">Python</category><category domain="http://community.sharpdevelop.net/blogs/mattward/archive/tags/IronPython/default.aspx">IronPython</category></item><item><title>SharpDevelop 3.0 Final</title><link>http://community.sharpdevelop.net/blogs/laputa/archive/2009/02/10/sharpdevelop-3-0-final.aspx</link><pubDate>Tue, 10 Feb 2009 08:48:17 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:25056</guid><dc:creator>Laputa</dc:creator><slash:comments>0</slash:comments><description>Another major release of SharpDevelop finally hits the streets - version 3.0 has been completed yesterday and is available for download as of now! Go get it...(&lt;a href="http://community.sharpdevelop.net/blogs/laputa/archive/2009/02/10/sharpdevelop-3-0-final.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=25056" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/laputa/archive/tags/Chris/default.aspx">Chris</category></item><item><title>WPF Designer Removed From SharpDevelop 3.0</title><link>http://community.sharpdevelop.net/blogs/laputa/archive/2008/12/14/wpf-designer-removed-from-sharpdevelop-3-0.aspx</link><pubDate>Sun, 14 Dec 2008 19:17:46 GMT</pubDate><guid isPermaLink="false">1b90d1c1-04e6-45b0-b51d-b665527d49b9:24428</guid><dc:creator>Laputa</dc:creator><slash:comments>0</slash:comments><description>On December 5th (revision 3655), we removed the WPF designer from SharpDevelop 3.0. The decision to remove this feature had its origins in an internal discussion between Daniel, Ivan and myself after watching the PDC 2008 session Microsoft .NET Framework: Declarative Programming Using XAML . There, System.Xaml.dll was announced - a parser for the full Xaml standard. Back then, a preview was announced for November, but that has been pushed back - please see the System.XAML CTP blog post by Rob Relyea...(&lt;a href="http://community.sharpdevelop.net/blogs/laputa/archive/2008/12/14/wpf-designer-removed-from-sharpdevelop-3-0.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.sharpdevelop.net/aggbug.aspx?PostID=24428" width="1" height="1"&gt;</description><category domain="http://community.sharpdevelop.net/blogs/laputa/archive/tags/Chris/default.aspx">Chris</category></item></channel></rss>