title: Portable Class Library vs Platform-Specific Releases
body: <p>With the introduction of the <a href="http://msdn.microsoft.com/en-us/library/gg597391.aspx" rel="nofollow">Portable Class Library</a>, developers can release a single library which is compatible across multiple platforms.  The down-side to this is that the PCL must reduce itself to the lowest common set of classes which are compatible across ALL the specified platforms.</p>
  
  <p>If you want to play to the strengths and functionality of specific platforms, (or if you want access to classes which only exist in certain platforms), I assume you have to do one of the following:</p>
  
  <ol>
  <li>Release a "base" set of classes as a Portable Class Library, with accompanying Platform-Specific libraries which build on it.<br>
  <ul>
  <li>One example could be an MVVM library: release common base classes as a single Portable Class Library - named "MyCustomMvvm.dll" - and release some additional platform functionality in the form of "MyCustomMvvm.Extras.WPF.dll" and "MyCustomMvvm.Extras.WP7.dll," etc... OR:</li>
  </ul></li>
  <li>Keep a separate project for each platform, using "linked" source files and #if statements to conditionally compile platform-specific functionality.
  <ul>
  <li>For this example all the libraries would have the same filename ("MyCustomMvvm.dll"), but would have a separate copy for each platform, built using a platform-specific project within your solution.</li>
  </ul></li>
  </ol>
  
  <p>My question is: are those the only two options?  Is there a clearly "better" option?</p>