R – Targeting both .NET 3.5 and Silverlight

.netbuildcsprojmsbuildsilverlight

Let's imagine I already have a project building .NET 3.5 assembly. Now I want to build this assembly for Silverlight, and moreover, maintain its Silverlight version with minimal efforts further.

What is not acceptable:

  • Creating separate project for Silverlight build

What is acceptable:

  • Adding custom directives allowing me to target either Silverlight or .NET dependently on e.g. MSBuild properties.
  • Adding special build configurations for Silverlight
  • Adding #ifdef Silverlight / #endif sections to the source code.
  • Generally any other modification of .csproj / .cs.

So basically, I'd like to maintain a single project, but target two frameworks. I don't want to maintain two separate projects, because this may lead to mistakes like forgetting to include a new file. If there are many project and big team, this is really important to exclude such mistakes.

If this is completely impossible, any solution providing similar benefits is acceptable.

Best Solution

Have you also ruled out linking to the files inside the your project from a Silverlight project? That's a fairly common approach to sharing an implementation between Silverlight and the full CLR. Sharing Code Between .NET and Silverlight Platforms

Also, according to Justin Angel you can reference and use a Silverlight class library from the full CLR. I haven't tried this myself, and it leaves some questions unanswered, but it does make the scenario straightforward: http://silverlight.net/blogs/justinangel/archive/2008/12/29/using-silverlight-dlls-on-the-desktop.aspx