I am pleased to announce the release of PostSharp 1.5 SP1, the latest and last maintenance release of the open-source branch of PostSharp. This service pack solves all bugs and issues reported for this branch so far.

As promised, there is no change in the license (except that the licensor is SharpCrafters s.r.o. instead of Gael Fraiteur). The updated source code is available.

Version 1.5 will not be maintained any more for the public. SharpCrafters will fix bugs and provide support on 1.5 only to customers who have purchased a Support Subscription for PostSharp 2.0 with extension to PostSharp 1.5, in the context of a support ticket. Note that you have to act now if you want to be eligible for support on 1.5, since the possibility to acquire a License Extension to PostSharp 1.5 will not be offered after June 1st, 2010. After this date, only customers who already acquired the license extension will be eligible for support services on PostSharp 1.5.

Also, you’ll notice that, as it was the case on postsharp.org, registration is required to download PostSharp 1.5. Registration is free and easy with your OpenID. Downloads will not be made available to people won’t have registered before the time PostSharp 2.0 RTW is released. This is because we offer PostSharp 1.5 for legacy support for existing users, not as an alternative for new users.

List of bugs solved by this service pack

The following bugs were already fixed in intermediate hot fix releases:

  • Unhandled exception when more than 32 advices are added to the same method.
  • Aspect are not inherited from methods of generic interface to implicit implementations of these methods
  • ModuleDeclaration.FindField(FieldInfo,...) throws a BindingException when the FieldRef does not exist
  • PostSharp generates RunCodeAnalysis build errors in non-Team VS
  • BindingException on references to binary assemblies with the "CopyLocal" flag set to false
  • Types or methods with more that 32 generic parameters (like anonymous types) crash.
  • Debugging problem when putting a breakpoint on the end of the method body
  • System.TypeLoadException in compile time when using ImplementMethodAspect.
  • Crash when using XmlSerializer in external aspect implementation
  • VB.NET Exception Filter Crash
  • Advices which have a method woven by OnTargetInvocationAspect as an Operand ignored.
  • PostSharp.NAntTasks.dll throws an exception while weaving
  • Exception with CustomAttributeInjector when a generic type instance is passed as parameter.
  • PostSharp Help is not merged into Visual Studio Help
  • NotSupportedException thrown when some bad path is passed to PostSharp
  • Crash when using generic constraints to generic methods
  • Lack of Detail in MSBuild Task Exception
  • BadImageFormatException when Gnu.Classpath.Core and Gnu.Classpath.JAXP are referenced

The following bug fixes have never been released before:

  • Method InitializeAspects is invoked multiple times in the chain of constructors
  • Accessing InstanceTag in a generic class results in a BadImageFormatException
  • AssemblyLocator should not look into the GAC when used for Silverlight/CF
  • AssemblyLocator should consider reference files with higher priority than reference directories.
  • OnMethodInvocation: cannot apply on an interface method even if inheritance is enabled
  • IAnnotationProvider requires CustomAttributeDeclaration instead of IAnnotationInstance
  • In InstructionBlockBuilder.ProcessLexicalScope, handle all exceptions when accessing PDBs
  • TypeLoadException with an aspect applied on a method of a generic struct
  • Bug with multicasting aspect that holds generics

Note that all bug fixes (including test cases) from the 1.5 branch have now been merged into the 2.0 branch.

Happy PostSharping!


I got many questions last weeks about deploying PostSharp 2.0 to a build server and deploying licenses in the source control repository. Since these issues are somehow related, I answer them in a single post.

The updated CTP 4 (build 1009) contains two improvements that are good to know about.

1. Running PostSharp in an unattended session

Roy Osherove reported a problem when PostSharp 2.0 runs in a GUI-less build server. The cause of the issue was the tray icon of the pipe server. The new build will not attempt to open the tray icon if PostSharp detects that it runs in unattended mode.

PostSharp uses the property Environment.UserInteractive to determine whether the process is attended or not. If, for some reason, this detection gives unsuccessful, you can forbid the pipe server to open the tray icon by setting the following machine-level registry setting:

Windows 64-bit:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SharpCrafters\PostSharp 2.0]

Windows 32-bit:

[HKEY_LOCAL_MACHINE\SOFTWARE\SharpCrafters\PostSharp 2.0]

2. Installing a license in the source control repository

PostSharp makes it very easy to deploy license keys: you can include it in your source control repository. First, paste the license key in a text file. Then, you need to tell PostSharp where the license key lies. This can be done by setting the MSBuild property named PostSharpLicenseFile to the full path of the license file.

One of the way of setting an MSBuild property is to edit the project file using a text editor and include the following before importing PostSharp targets:

<!-- There should probably be line break in the property -->

There are other ways to deploy the license key. For instance, you can put it on a network share and use group policies to set the PostSharpLicenseFile environment variable to the location on the share.

Note that sharing a license key is only legal if you have a company license key (Commercial License, Site License, Global License). Since other licenses (community and personal) are bound to a specific person, they cannot be shared.

3. Licensing of build servers

Build servers don’t need their own license. PostSharp will not attempt to enforce licensing if it detects that it runs in unattended mode. Again, it uses the property Environment.UserInteractive. The TrayIconDisabled registry setting has no effect on license check.

Now, this check does not work for any reason, you may use the license key of any licensed user for the build server. This will not be consider a license infringement.

As you can see, we try to make our licensing system as no-nonsense as possible. Our philosophy is that paying customers should not be handicapped by overly restrictive license enforcement. Something that not every software (or media) publisher understands…

Happy PostSharping!


We were under daily assaults of people eager to buy PostSharp licenses. Now it’s ready. You can purchase licenses of PostSharp 2.0 online – or get a free community license.

Payment processing is handled by FastPay by FastSpring, an established and trusted partner with a large selection of payment types.

How it works

Clicking on the Purchase button brings you to a simple calculator designed to help you choose the best option based on the size of your team and your support requirements. Maybe you have already seen it since it’s the third most popular page of the site – just after downloads.

In order to proceed with your purchase, you need to be registered on our website. Don’t worry, you will not need to remember yet another username and password. Instead, our Login / Sign-In process uses OpenID technology.

After you specify licensee and review your order, you will be redirected to FastSpring to make a payment. You will then receive you new license by email.

Community License

PostSharp 2.0 offers free Community Edition with limited set of features. You can apply for your free Community License on the Compare PostSharp Editions page.


Online purchases are one of many steps in moving PostSharp from an open-source project to a commercial product. We have tried to make our e-shop easy, helpful and convenient and we hope your experience will confirm that.

As always, don’t hesitate to let us know, should you have any questions, concerns or suggestions. Your feedback is always welcome!

Happy PostSharping!