<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Laputa</title>
  <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/" />
  <link rel="self" href="http://laputa.sharpdevelop.net/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2009-06-13T15:32:58.921875+02:00</updated>
  <author>
    <name>SharpDevelop Core Team</name>
  </author>
  <subtitle>The Web log of the #develop team</subtitle>
  <id>http://laputa.sharpdevelop.net/</id>
  <generator uri="http://www.dasblog.net" version="2.0.7180.0">DasBlog</generator>
  <entry>
    <title>Compiling with MSBuild in SharpDevelop</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/CompilingWithMSBuildInSharpDevelop.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,ec5316c9-cfeb-4cf1-bb31-2afb463bd68a.aspx</id>
    <published>2009-06-13T15:09:44.937+02:00</published>
    <updated>2009-06-13T15:32:58.921875+02:00</updated>
    <category term="Daniel" label="Daniel" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Daniel.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">SharpDevelop uses the MSBuild libraries
for compilation. But when you compile a project inside SharpDevelop, there's more
going on than a simple call to MSBuild.<br /><br />
SharpDevelop does not pass the whole solution to MSBuild, but performs one build for
each project. This is done to give SharpDevelop more control - e.g. we can pass properties
to MSBuild per-project. For example, when you click "Run code analysis on project
X", we'll first build all dependencies of X normally, and then project X with code
analysis enabled. A normal MSBuild call (e.g. if you use it on the command line) would
perform code analysis on all dependencies of X, too.<br /><br />
When calling MSBuild on a project on the command line, MSBuild will find all referenced
projects and build them recursively. We have to prevent this kind of recursive build
inside SharpDevelop, as we already took care of the referenced projects. We don't
want MSBuild to check referenced projects for changes repeatedly (this would dramatically
slow down builds), and of course we need to prevent MSBuild from running stuff like
code analysis on the dependencies. Fortunately, the Visual Studio team had the same
requirement, so SharpDevelop can simply set the property "BuildingInsideVisualStudio"
to true to disable recursive builds.<br /><br />
However, using that property, MSBuild will call the C# compiler on every build, even
if no source files were changed. This is desired in Visual Studio - VS has its own
"host compiler" that does change detection. But it's bad for SharpDevelop. As a workaround,
we override the MSBuild target responsible for this and fix it. This is an <b>in-memory
modification </b>to your project file; it never gets saved to disk.<br /><br />
Another point where we use this kind of in-memory modifications is for <b>importing
additional .targets files </b>in your project. Some AddIns in SharpDevelop do this
to add new features to the build process - for example the code analysis AddIn.<br /><br />
Now enter <b>parallel builds</b>. It would be nice to be able to call MSBuild on multiple
threads and compile projects in parallel. Unfortunately, that's not possible. MSBuild
uses the process's <b>working directory</b> as a global variable. In one process,
only one build can run at a time. Even worse: if you have MSBuild in your process,
all your other code must deal with concurrent changes to the working directory.<br /><br />
In <b>.NET 3.5</b>, Microsoft introduced the "/m" switch in MSBuild. This makes MSBuild
create multiple worker processes (usually one per processor), enabling concurrent
builds. Unfortunately, this feature is exposed in the MSBuild API only through a single
method, and that only allows several project files from the hard disk in parallel.
It does not support in-memory projects; it cannot even compile projects in parallel
if there are dependencies. Microsoft solves the latter problem by separating the project
in the solution into 'levels' which depend only on projects from the previous level.
However, this doesn't mix well with the way building is integrated in SharpDevelop
- we don't use levels but do a kind of topological sort on the dependency graph, and
not all SharpDevelop project have to use MSBuild; AddIn authors could choose their
own project format and build engine. In the end, I had to <a href="http://laputa.sharpdevelop.net/CompilingInSharpDevelopJustGot30Faster.aspx">create
my own build worker executable</a>.<br /><br />
Now<b></b>in <b>.NET 4.0</b>, Microsoft created a <b>completely new MSBuild API</b>.
The 'level' problem is solved: the new API allows adding new jobs to a running build.
It also seems like it is possible to build in-memory projects in parallel now. But
as it turned out, in-memory changes only work in the primary build worker (in-process),
all other workers load the file from the hard disk and <b>ignore our changes</b>.<br />
Instead of going back to our custom build worker, however; I decided to find a different
solution for handling our modifications. Microsoft.Common.targets contains several
extensions points adding custom .targets files by setting a property. A good solution
for added a custom new target might be setting "CustomAfterMicrosoftCommonTargets"
to the name of the .targets file. However, this might conflict with projects that
already use this feature, so instead I chose "CodeAnalysisTargets". SharpDevelop comes
with its own code analysis targets, so it doesn't hurt if we disable the Microsoft
targets.<br />
So in the end, the solution is trivial: create a temporary file containing only our
modifications and set a property to tell MSBuild to pick up that file.<br /><br />
Why couldn't I simply write the project file including the modifications into a temporary
file? The <a href="http://msdn.microsoft.com/en-us/library/ms164309.aspx">MSBuild
reserved properties</a> would point to the temporary file and custom build events
using those properties would likely fail.<img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=ec5316c9-cfeb-4cf1-bb31-2afb463bd68a" /></div>
    </content>
  </entry>
  <entry>
    <title>SharpDevelop running on .NET 4.0 Beta 1</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/SharpDevelopRunningOnNET40Beta1.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,39534573-5893-46b6-866c-a7743e03f68b.aspx</id>
    <published>2009-05-22T20:50:08+02:00</published>
    <updated>2009-05-22T20:54:36.53125+02:00</updated>
    <category term="Daniel" label="Daniel" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Daniel.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
As you've probably already heard, Microsoft released .NET 4.0 Beta 1 on May, 20th.
</p>
        <p>
SharpDevelop 4.0 will be the SharpDevelop version built on top of .NET 4.0. I've just
got it running:
</p>
        <img border="0" src="http://laputa.sharpdevelop.net/content/binary/RunningOnDotnet4.png" />
        <p>
Yes, that message really reads: "Compiling is not yet implemented". There were huge
changes in MSBuild 4.0 and the parts of SharpDevelop's project system that are talking
to MSBuild will have to be rewritten.
</p>
        <p>
The .NET 4.0 work on SharpDevelop is going on in the dotnet4 branch, for which we
do not provide builds. The dotnet4 branch will be merged back into trunk as soon as
it's good enough so that I think other SharpDevelop contributors can be expected to
use it.
</p>
        <p>
But myself, I'm currently stuck using a dysfunctional version of SharpDevelop for
development. I cannot use previous versions since they cannot compile for .NET 4.0
and don't have code completion for 4.0 libraries. Using the dotnet4 version of SharpDevelop
at least gives me code completion for 4.0 libraries, but it looks like I'll have to
compile from the command line for some time.
</p>
        <p>
I cannot even use Visual Studio 2010 as it doesn't want to open ICSharpCode.SharpDevelop.csproj
- it says it's an unsupported project format. Even if I recreate that project in Visual
Studio, VS doesn't want to open it - looks like a VS bug to me.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=39534573-5893-46b6-866c-a7743e03f68b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>SharpDevelop 3.1 Beta 1</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/SharpDevelop31Beta1.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,ea055f9a-730b-4579-a97b-fd8cd350e6d8.aspx</id>
    <published>2009-05-14T21:41:52.1875+02:00</published>
    <updated>2009-05-14T21:41:52.1875+02:00</updated>
    <category term="Chris" label="Chris" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Chris.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://community.sharpdevelop.net/forums/p/9510/26432.aspx">It is finally
available</a>
        </p>
        <p>
The really newsworthy feature is the profiler - it has been in the works for over
a year, and it is the first full-fledged open source profiler for .NET. Siegfried
would love to hear your feedback in the forums, especially which features should be
next in the pipeline.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=ea055f9a-730b-4579-a97b-fd8cd350e6d8" />
      </div>
    </content>
  </entry>
  <entry>
    <title>GSOC proposals</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/GSOCProposals.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,77dc4d59-d95d-4984-8dac-91a5c6f63ce7.aspx</id>
    <published>2009-04-04T02:16:03.921+02:00</published>
    <updated>2009-04-04T19:57:05.859375+02:00</updated>
    <category term="Daniel" label="Daniel" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Daniel.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
The time to send in proposals for Google Summer Of Code is over now.
</p>
        <p>
Now we'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.
</p>
        <p>
In total, we got 44 proposals from 34 students - much more than I expected.
</p>
        <p>
Here's the list of topics proposals were written on. As you can see, most of
them come straight from the <a href="http://wiki.sharpdevelop.net/gsoc.ashx">ideas
page</a>.
</p>
        <ul>
          <li>
10 proposals on Database tools 
</li>
          <li>
5 class diagram / UML related 
</li>
          <li>
4 Edit and Continue / C# background compilation 
</li>
          <li>
4 ASP.NET 
</li>
          <li>
4 Refactoring 
</li>
          <li>
3 C++ support 
</li>
          <li>
3 Debugger visualizer 
</li>
          <li>
3 Customizable Shortcuts 
</li>
          <li>
1 VB 9 code completion 
</li>
          <li>
1 Pretty printer 
</li>
          <li>
1 XAML code completion 
</li>
          <li>
1 Integrated bug tracking 
</li>
          <li>
1 actually creative idea 
</li>
          <li>
1 idea completely unrelated to SharpDevelop 
</li>
          <li>
1 idea I couldn't understand - due to completely broken English and an empty 'Details'
section 
</li>
          <li>
1 proposal that didn't have any idea</li>
        </ul>
        <p>
But we're looking for students who would like to join the SharpDevelop team; we don't
simply want to get some work done. So it's possible that we'll pick multiple
students from the same 'category'; and having the only proposal on a much required
feature doesn't mean you're automatically accepted.
</p>
        <p>
There also were some Java proposals but I'm not sure where they disappeared to. In
any case, SharpDevelop is a .NET IDE, not a Java one. There are already good open
source Java IDEs available; no need to add Java support to SharpDevelop.
</p>
        <p>
This is our first GSOC and I'm not too sure how we should judge the proposals.
A surprisingly large part of them is obviously disqualified because the proposal is
missing necessary details / the template isn't filled out completely. And what
to do with a student who makes a promising impression but chose a project that isn't
really interesting to us; or looks like it's not enough work for GSOC? What about
projects that look like they cannot be done in the GSOC time frame; but it might be
possible for a good coder and the Bio looks like the student knows what he's doing?
</p>
        <p>
We don't know yet how many slots Google will give to us, so we are as excited
as you are :)
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=77dc4d59-d95d-4984-8dac-91a5c6f63ce7" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Subversion 1.6</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/Subversion16.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,d3ccf7d4-ff3d-4790-b316-87d4e13962dc.aspx</id>
    <published>2009-04-03T22:20:24.421875+02:00</published>
    <updated>2009-04-03T22:20:24.421875+02:00</updated>
    <category term="Daniel" label="Daniel" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Daniel.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In SharpDevelop 3.1.0.3948, I changed our Subversion integration to use <a href="http://sharpsvn.open.collab.net/">SharpSVN</a> instead
of <a href="http://www.pumacode.org/projects/svndotnet/">SvnDotNet</a>.
</p>
        <p>
SharpSVN exposes more Subversion APIs to managed code, which could result in some
nice features in the (far) future - for example, "SVN Diff" right inside the
text editor.
</p>
        <p>
But the main reason for the upgrade was that SharpSVN supports Subversion 1.6. <strong>If
you are using TortoiseSVN 1.6, you need to update to SharpDevelop 3.1</strong>. The
old SvnDotNet does not work with new working copies.
</p>
        <p>
However, the same is true in the other direction: <strong>if you use SharpDevelop
3.1, you must update to TortoiseSVN 1.6</strong>. No matter which .NET wrapper or
client version is accessing a repository, the underlying Subversion library has
the unpleasant feature to <strong>automatically upgrade working copies</strong>. As
soon as the Subversion 1.6 library inside SharpDevelop touches your working copy,
Subversion 1.5 clients will no longer be able to access it.
</p>
        <p>
You need to <strong>update all Subversion clients</strong> on your machine <strong>at
the same time</strong>. SharpDevelop contains a Subversion client<strong>:</strong></p>
        <ul>
          <li>
SharpDevelop 3.0 comes with Subversion 1.5 and requires TortoiseSVN 1.5.</li>
          <li>
SharpDevelop 3.1 <font size="1">(starting with revision 3948)</font> comes with Subversion
1.6 and requires TortoiseSVN 1.6.</li>
        </ul>
        <p>
          <a href="http://subversion.tigris.org/faq.html#working-copy-format-change">This entry
in the Subversion FAQ</a> describes the problem and offers a working copy downgrade
script, in case you decide to go back to a previous SVN client version.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=d3ccf7d4-ff3d-4790-b316-87d4e13962dc" />
      </div>
    </content>
  </entry>
  <entry>
    <title>GSoC 2009</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/GSoC2009.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,2bdc252e-ee03-4298-8a59-687f6e83f09b.aspx</id>
    <published>2009-03-24T14:42:01.843+01:00</published>
    <updated>2009-03-24T14:43:13.609375+01:00</updated>
    <category term="Chris" label="Chris" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Chris.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
David wrote a <a href="http://community.sharpdevelop.net/blogs/dsrbecky/archive/2009/03/24/gsoc2009.aspx">blog
post on our participation in the GSoC 2009</a>. It refers to the <a href="http://wiki.sharpdevelop.net/GSoc.ashx">GSoC
2009 Wiki entry</a> 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 "visibility" (a feature that will be used by a large percentage of our user
base):
</p>
        <ol>
          <li>
The database scout / database api / EDM designer (we already have a student lined
up for this) 
</li>
          <li>
Debugger improvements (visualizers, edit and continue support, ...) 
</li>
          <li>
VB.NET 9 support on par with our existing C# 3.0 support (most likely a task for a
CS student) 
</li>
          <li>
Refactoring support (think ReSharper) 
</li>
          <li>
Customizable keyboard shortcuts / toolbars</li>
        </ol>
        <p>
I took "Everything .NET 4.0" from my top five because Beta 1 of Framework 4.0 most
likely won't hit the streets before the student application deadline. And I will
post further ideas in David's blog post, so you might find something palatable there
too.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=2bdc252e-ee03-4298-8a59-687f6e83f09b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>SharpDevelop 3.0 Final</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/SharpDevelop30Final.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,063335d3-a28e-42b3-af55-bea5bc447135.aspx</id>
    <published>2009-02-10T09:48:17.96875+01:00</published>
    <updated>2009-02-10T09:48:17.96875+01:00</updated>
    <category term="Chris" label="Chris" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Chris.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Another major release of SharpDevelop finally hits the streets - version 3.0 has been
completed yesterday and is available for download as of now! <a href="http://community.sharpdevelop.net/forums/t/9017.aspx">Go
get it</a></p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=063335d3-a28e-42b3-af55-bea5bc447135" />
      </div>
    </content>
  </entry>
  <entry>
    <title>WPF Designer Removed From SharpDevelop 3.0</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/WPFDesignerRemovedFromSharpDevelop30.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,6476cbaf-2759-4c29-90c5-89ad07e93c5d.aspx</id>
    <published>2008-12-14T20:17:46.53125+01:00</published>
    <updated>2008-12-14T20:17:46.53125+01:00</updated>
    <category term="Chris" label="Chris" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Chris.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
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 <a href="http://channel9.msdn.com/pdc2008/TL36/">Microsoft
.NET Framework: Declarative Programming Using XAML</a>. There, System.Xaml.dll was
announced - a parser for the full Xaml standard.
</p>
        <p>
Back then, a preview was announced for November, but that has been pushed back - please
see the <a href="http://blogs.windowsclient.net/rob_relyea/archive/2008/12/10/system-xaml-ctp.aspx">System.XAML
CTP</a> blog post by Rob Relyea. Therefore we had to take the decision whether to
use System.Xaml.dll without doing a prototype, but we opted for saving ourselves the
chore of having to keep abreast with future XAML changes by sticking with a standard
parser instead of having to maintain our own.
</p>
        <p>
Because System.Xaml.dll is part of .NET Framework 4.0, we had to remove the WPF designer
feature from SharpDevelop 3.0.<br /></p>
        <p>
        </p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=6476cbaf-2759-4c29-90c5-89ad07e93c5d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>NRefactory TypeReference - breaking change</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/NRefactoryTypeReferenceBreakingChange.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,2c488b7c-f660-47dd-8625-207532c25c44.aspx</id>
    <published>2008-12-06T19:49:41.71875+01:00</published>
    <updated>2008-12-06T19:49:41.71875+01:00</updated>
    <category term="Daniel" label="Daniel" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Daniel.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In version 3.0.0.3660, I changed how NRefactory's <font face="Courier New">TypeReference.Type</font> works.
This is a potentially breaking change to users of NRefactory.
</p>
        <p>
Previously, <font face="Courier New">TypeReference</font> had both a "<font face="Courier New">Type</font>"
and a "<font face="Courier New">SystemType</font>". If you parsed "<font face="Courier New">long
a;</font>", you got a <font face="Courier New">TypeReference</font> with Type="<font face="Courier New">long</font>"
and SystemType="<font face="Courier New">System.Int64</font>". 
</p>
        <p>
However, this got a little problematic if you wanted to modify the AST - do you have
to change both <font face="Courier New">Type</font> and <font face="Courier New">SystemType</font>?
Actually, setting <font face="Courier New">Type</font> to "<font face="Courier New">int</font>"
was automatically setting <font face="Courier New">SystemType</font> to "<font face="Courier New">System.Int32</font>"
- even if you were modifying VB code which doesn't have the "<font face="Courier New">int</font>"
keyword but uses "<font face="Courier New">Integer</font>". The other way round,
setting <font face="Courier New">Type</font> to "<font face="Courier New">DATE</font>"
would set <font face="Courier New">SystemType</font> to "<font face="Courier New">System.DateTime</font>"
- not only for VB, but also for C#. Because the parser internally also uses the Type
setter, "<font face="Courier New">DATE d;</font>" would parse to "<font face="Courier New">System.DateTime
d;</font>" in C#!
</p>
        <p>
To solve this, I removed the language-specific "<font face="Courier New">Type</font>".
Now the <font face="Courier New">Type</font> property always contains the <font face="Courier New">SystemType</font>.
You can use the new boolean <font face="Courier New">IsKeyword</font> property to
tell if the type was specified using the language keyword or if the CLR type was specified
explicitly.
</p>
        <p>
Another related problem was that there was no way to output "<font face="Courier New">System.Int32
a;</font>" using NRefactory - the output visitor would always automatically convert
it to "<font face="Courier New">int a;</font>". I changed this, too - now the output
visitors will use the short form only if the <font face="Courier New">IsKeyword</font> property
is set. So code generators using NRefactory will output the long form when using the
new NRefactory version unless they are modified to set <font face="Courier New">IsKeyword</font>=<font face="Courier New">true</font>.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=2c488b7c-f660-47dd-8625-207532c25c44" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Code Analysis improvements in SharpDevelop 3.0</title>
    <link rel="alternate" type="text/html" href="http://laputa.sharpdevelop.net/CodeAnalysisImprovementsInSharpDevelop30.aspx" />
    <id>http://laputa.sharpdevelop.net/PermaLink,guid,ffdeb55b-b553-4803-92cf-424197b3d150.aspx</id>
    <published>2008-09-06T19:32:29.875+02:00</published>
    <updated>2008-09-06T19:33:02.046875+02:00</updated>
    <category term="Daniel" label="Daniel" scheme="http://laputa.sharpdevelop.net/CategoryView,category,Daniel.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In revision 3506, SharpDevelop 3.0 got improved support for code analysis using FxCop
1.36.
</p>
        <p>
There were some bugs fixed that were related to the suppress message command
- it was working only with FxCop 1.35, but even there couldn't suppress messages for
static constructors and explicitly implemented interface members.
</p>
        <p>
          <img src="http://laputa.sharpdevelop.net/content/binary/SuppressMessage1.png" border="0" />
        </p>
        <p>
Using this command inserts a SuppressMessageAttribute in the code:<br /><img src="http://laputa.sharpdevelop.net/content/binary/SuppressMessage2.png" border="0" /></p>
        <p>
A new feature is support for custom dictionaries for the FxCop spell checker. Instead
of suppressing tons of spelling messages, you can simply add a new xml file to your
project with content like this:
</p>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
&lt;?xml version="1.0"?&gt;<br /></p>
          </font>
        </font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;Dictionary&gt;<br />
  &lt;Words&gt;<br />
    &lt;Recognized&gt;<br />
      </font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">&lt;!--
add words specific to your application here --&gt;<br />
      </font>
        </font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;Word&gt;</font>
        </font>
        <font color="#000000" size="2">Uncollapse</font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;/Word&gt;<br />
    &lt;/Recognized&gt;<br />
    &lt;Unrecognized&gt;<br />
      </font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">&lt;!--
Disable Lineup as a single word - LineUp is the spelling used in WPF --&gt;<br />
      </font>
        </font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;Word&gt;</font>
        </font>
        <font color="#000000" size="2">Lineup</font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;/Word&gt;<br />
    &lt;/Unrecognized&gt;<br />
    &lt;Deprecated&gt;<br />
      </font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">&lt;!--
Use this section to deprecate terms --&gt;<br />
      </font>
        </font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;Term </font>
        </font>
        <font color="#ff0000" size="2">
          <font color="#ff0000" size="2">PreferredAlternate</font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">="Best"</font>
        </font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&gt;</font>
        </font>
        <font color="#000000" size="2">Bestest</font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;/Term&gt;<br />
    &lt;/Deprecated&gt;<br />
  &lt;/Words&gt;<br />
  &lt;Acronyms&gt;<br />
    &lt;CasingExceptions&gt;<br />
      </font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">&lt;!--
Use this section to tell FxCop the correct casing of acronyms. --&gt;<br />
      </font>
        </font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;Acronym&gt;</font>
        </font>
        <font color="#000000" size="2">WiX</font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;/Acronym&gt;<br />
    &lt;/CasingExceptions&gt;<br />
  </font>
        </font>
        <font color="#8b008b" size="2">
          <font color="#8b008b" size="2">&lt;/Acronyms&gt;<br />
&lt;/Dictionary&gt;</font>
        </font>
        <p>
          <font color="#8b008b" size="2">
            <font color="#8b008b" size="2">
              <font color="#003300">And
then set the file's build action to "CodeAnalysisDictionary" (this build action does
not appear in the drop down, you'll have to type it in).</font>
            </font>
          </font>
        </p>
        <p>
          <img src="http://laputa.sharpdevelop.net/content/binary/CodeAnalysisDictionaryBuildAction.png" border="0" />
        </p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=ffdeb55b-b553-4803-92cf-424197b3d150" />
      </div>
    </content>
  </entry>
</feed>