title: Avoiding .NET versioning hell
body: <p>So sometimes (oftentimes!) you want to target a specific .NET version (say 3.0), but then due to some .NET service packs you get into problems like:</p>
  
  <ul>
  <li><code>Dispatcher.BeginInvoke(Delegate, Object[])</code> &lt;-- this was added in 3.0 SP2 (3.0.30618 )</li>
  <li><code>System.Threading.WaitHandle.WaitOne(Int32)</code> &lt;-- this was added in 3.5 SP1, 3.0 SP2, 2.0 SP2</li>
  </ul>
  
  <p>Now, these are detected by the JIT compiler, so building against .NET 3.0 in Visual Studio won't guarante it will run on .NET 3.0 only systems.</p>
  
  <p>Short of </p>
  
  <ul>
  <li>confirming each and every function you use, or</li>
  <li>limiting your development environment to .NET 3.0 (which sucks since you have to develop for other projects too)</li>
  </ul>
  
  <p>what's the best way to avoid against using extensions?</p>
  
  <p>Thanks!</p>