title: Programmatically determining Mono runtime version
body: <p><strong>What is the recommended way to determine the Mono runtime version programmatically?</strong></p>
  
  <p>We have encountered various problems when our .Net application is used with older versions of Mono.  Sometimes we can work around these problems, if we know which version we are dealing with, but sometimes we can't.</p>
  
  <p>The solution for us would be to detect the Mono version programmatically, and then we can transparently apply the workarounds.  If the Mono version is too old, then we would prompt the user to upgrade.</p>
  
  <p>We can discover that Mono is our runtime with something like this:</p>
  
  <pre><code>bool isMonoRuntime = Type.GetType("Mono.Runtime") != null;
  </code></pre>
  
  <p>How can we also determine reliably the mono version without inferring it indirectly?  To be clear, we need the Mono release number, not the .Net CLR version number.</p>