Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why might System.Threading.dll be missing from Windows\Assembly?

I've various versions of the .NET Framework (versions 1.1 thru 4.0) installed on a remote machine running XP Professional. I've installed Reactive Extension too for good measure.

I also have an application which works on my machine because it references System.Threading found here: C:\Program Files\Microsoft Reactive Extensions\redist\desktopV2\System.Threading.dll

I have two versions of the DLL in the GAC also.

Two questions:

i) Why did Visual Studio decide that this is the version (instance) to reference when I chose from the list rather than browsing to to the file?

ii) Why does System.Threading not exist on the remote machine? (I thought it was a core part of the Framework)

Thanks

like image 617
Kofi Sarfo Avatar asked Aug 04 '10 12:08

Kofi Sarfo


1 Answers

System.Threading.dll was added in .NET 4.0 (though the namespace System.Threading has been around since v1). Rx includes a version of System.Threading.dll that was backported to .NET 3.5 SP1.

It sounds like you're targeting .NET 3.5. In this case, the runtime won't load a 4.0-only System.Threading.dll (obviously). Your loading would fail unless you included the Rx version of System.Threading.dll along with your program.

To answer the questions directly:

  1. Rx registers its own private directories as framework extensions. This is how it's found by VS.
  2. System.Threading.dll is only included in .NET 4.0, so if you are targeting an earlier framework, it won't be found.

To solve your problem, either have your program target .NET 4.0 or include Rx's System.Threading.dll along with your program.

P.S. I recommend upgrading to the latest version of Rx. The desktopV2 folder hasn't been used for the last few releases. When upgrading, uninstall the old version first - it works better that way.

like image 147
Stephen Cleary Avatar answered Sep 22 '22 06:09

Stephen Cleary