System.Reactive.Core.dll

时间:2016-07-09 19:06:29

标签: .net .net-assembly

我对Rx中一个相当简单的项目中遇到的异常感到困惑。

我用Google搜索BadImageFormatException并发现在尝试将特定于平台的程序集加载到不兼容的进程时抛出它。

我的项目的平台设置是"任何CPU"但是,显然System.Reactive.Core.dll本身也是如此。

堆栈跟踪的顶部位于Rx:

enter image description here

读取的来源

    protected override void OnNextCore(T value)
    {
        _onNext(value);
    }

_onNextAction<...>

我当前的问题是,我不知道如何确定哪个组件实际上无法加载 - 这些信息并非我得到的例外情况,而且我不知道从哪里得到它。

我不认为它实际上是关于Rx的,但它是什么?

任何想法?

编辑1:

这是fuslogvw在非调试器运行时的结果,设置为&#34;显示所有绑定&#34;,以及从异常中获取的堆栈跟踪。将fuslogvw设置为仅显示失败的绑定不会给我任何东西。

enter image description here

编辑2:

我也确定&#34;更喜欢32位&#34;在来自我的所有程序集中都设置为off,尤其是主控制台应用程序。

编辑3:

绝对令人困惑:我现在打破了解决方案,删除了所有依赖项,包括rx,并将源代码粘贴到新解决方案中,所有项目都直接从向导中移除 - 它仍在发生。

我在另外两台机器上试过了,还在发生。

这到底是什么意思??

我绝望,这里是来源。也许比我更聪明的人很好奇:

source code

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

通常(我并不总是指),当程序集损坏或“位数”(即32位,64位)不同时,BadImageFormatException会被抛出,换句话说,执行程序集是根据与正在加载的程序集不同的“位数”进行编译的。

在Visual Studio中,即使您选择了Any CPU选项,也请检查Prefer 32 bit是否已设置。可能是在您的应用程序中仍然存在32位和64位程序集的混合。

有关Prefer 32 bit字段的详细信息,请参阅此处: What is the purpose of the "Prefer 32-bit" setting in Visual Studio 2012 and how does it actually work?

检查程序集的另一种方法是下载并安装一个名为Assembly Information的漂亮工具,它将告诉您有关.NET程序集的更多信息。