Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to specify .NET service pack in "supportedRuntime" in app.config?

Tags:

c#

.net

I have an application that runs fine on .Net 2.0 SP2, but fails to run properly on .NET 2.0 RTM. (FYI: It fails when calling a method a managed DLL that is a wrapper for a native DLL for USB programming).

I know you can give supported runtimes in the app.config of a C# .NET application

  <startup>
    <supportedRuntime version="v2.0.5727" />
    <supportedRuntime version="v4.0" />
  </startup>

However, is it also possible to specify a specific Service Pack version?

Thanks!

Edit: I did now find out which method fails between 2.0 and 2.0 SP2. It is WaitHandle.WaitOne(int) which was added in 2.0 SP1.

A tip for everyone else having the problem, the compiler doesn't say anything but if you ngen the executable with the problematic runtime, it does give you the exact error.

E.g.:

Warning: System.MissingMethodException: Method not found: 'Boolean System.Threading.WaitHandle.WaitOne(Int32)'. while resolving 0xa0000e1 - System.Threading.WaitHandle.WaitOne.
11/11/2010 01:54:07 [3620]: Method not found: 'Boolean System.Threading.WaitHandle.WaitOne(Int32)'. while compiling method XXX

Rogier

like image 696
Rogier Avatar asked Nov 09 '10 15:11

Rogier


1 Answers

Great explanation can be found here on why this is not possible. You can locate a SO response here to address your needs.

<supportedRuntime> doesn't actually work that way, because the 3.5 framework uses the 2.0 runtime. You can only specify runtimes that way, not frameworks, and the element only expresses preference, not demand.

like image 176
Aaron McIver Avatar answered Sep 29 '22 02:09

Aaron McIver