我在运行 XP Professional 的远程计算机上安装了各种版本的 .NET Framework(版本 1.1 到 4.0)。我也安装了 Reactive Extension 以获得良好的测量效果。

我还有一个可以在我的机器上运行的应用程序,因为它引用了此处找到的 System.Threading:
C:\Program Files\Microsoft Reactive Extensions\redist\desktopV2\System.Threading.dll

我在 GAC 中也有两个版本的 DLL。

两个问题:

i) 当我从列表中选择而不是浏览到文件时,为什么 Visual Studio 决定这是要引用的版本(实例)?

ii) 为什么远程机器上不存在 System.Threading?
(我认为这是框架的核心部分)

谢谢

最佳答案

System.Threading.dll 是在 .NET 4.0 中添加的(尽管命名空间 System.Threading 从 v1 开始就已经存在了)。 Rx 包含一个向后移植到 .NET 3.5 SP1 的 System.Threading.dll 版本。

听起来您的目标是 .NET 3.5。在这种情况下,运行时不会加载仅 4.0 版本的 System.Threading.dll(显然)。除非您在程序中包含 System.Threading.dll 的 Rx 版本,否则您的加载将失败。

直接回答问题:

  • Rx 将自己的私有(private)目录注册为框架扩展。这就是VS找到的方式。
  • System.Threading.dll 仅包含在 .NET 4.0 中,因此如果您针对的是较早的框架,则不会找到它。

  • 要解决您的问题,请让您的程序以 .NET 4.0 为目标,或者在您的程序中包含 Rx 的 System.Threading.dll。

    附言我建议升级到最新版本的 Rx。 desktopV2 文件夹在最近的几个版本中没有被使用。升级时,先卸载旧版本 - 这样效果会更好。

    关于.net - 为什么 Windows\Assembly 中可能会缺少 System.Threading.dll?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3405662/

    10-12 18:58