【问题标题】:Inexplicable MissingFieldException莫名其妙的 MissingFieldException
【发布时间】:2012-05-19 12:28:30
【问题描述】:

在以下代码 sn-p 中,它会引发 MissingFieldException: Field Not Found: DepthBidLevels 异常,但仅在下面描述的某些奇怪情况下。

for(int i=DomSize-1; i>=0; i--) {
    fixed( ushort *p = binary.DepthBidLevels) {
    if( i!=DomSize-1) {
        builder.Append( ",");
    }
    builder.Append( *(p + i));
}

二进制变量的类型是在单独的程序集中定义的结构:

unsafe public struct TickBinary
{
    public const int DomLevels = 5;
    public const int SymbolSize = 8;
    public const int minTickSize = 256;

    public long Symbol;
    public byte contentMask;
    public long Id;
    public long UtcTime;
    public long UtcOptionExpiration;
    public long Strike;
    public long Bid;
    public long Ask;
    public byte Side;
    public long Price;
    public int Size;
    public fixed ushort DepthAskLevels[DomLevels];
    public fixed ushort DepthBidLevels[DomLevels];
}

好的,上面的代码的工作方式取决于它的编译位置和方式。只要两个程序集(sn-p 程序集和 TickBinary 程序集)在同一台机器上编译,它们就可以正常工作。

但是,如果 sn-p 程序集构建在与 TickBinary 程序集不同的机器上,然后一起运行,则会引发 MissingFieldException。

您可能想知道,为什么它们是在不同的机器上构建的?该项目将部分代码提供为开源代码,将项目的其他部分提供为预编译的二进制文件。所以用户自己编译一部分,简单地引用预编译的程序集。

注意:sn-p 总是使用 Release 配置编译,这意味着它启用了优化。

但对我来说似乎无法解释的是它如何为 DepthBidLevels 字段提供缺失字段异常。这似乎没有使用任何类型的反射,或者 fixed 关键字是否在幕后使用反射?我对此表示怀疑,因为 sn-p 代码的性能正在快速下降。

编辑:我缩小了关键因素是程序集是由 msbuild 从命令行编译还是通过 Visual Studio 2008 编译。如果全部由命令行编译,它可以工作。如果所有都是通过 Visual Studio 编译的,它就可以工作。但是使用 MSBuild 构建的 TickZoomEngine 并使用通过 Visual Studio 2008 构建的 TickZoomAPI1.0 运行它会失败。在进行这些实验时,代码更改为零。为什么 Visual Studio compile 会与 MSBuild compile 不兼容?

编辑:由于下面的想法,这里是所有程序集及其引用的转储。一切似乎都井然有序。具体来说,最后一个程序集 TickZoomEngine 是代码 sn-p 引用 TickZoomAPI1.0 程序集中的结构类型的程序集。

Listing all assembly references...
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Microsoft.VisualStudio.HostingProcess.Utilities, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: Microsoft.VisualStudio.HostingProcess.Utilities.Sync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: Microsoft.VisualStudio.Debugger.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Runtime.Serialization.Formatters.Soap, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Microsoft.VisualStudio.HostingProcess.Utilities.Sync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Microsoft.VisualStudio.Debugger.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
vshost, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: Microsoft.VisualStudio.HostingProcess.Utilities.Sync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: Microsoft.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Data.SqlXml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
TickZoomGUI, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomCharting, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomPresentation, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: WindowsFormsUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
TickZoomPresentation, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
WindowsFormsUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomPresentation, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
PluginLoader, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: ICSharpCode.SharpZipLib, Version=0.85.5.452, Culture=neutral, PublicKeyToken=1b03e6acf1164f73
TickZoomLogging, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
TickZoomCharting, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: ZedGraph, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: WindowsFormsUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.DirectoryServices.Protocols, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
TickZoomPluginCommon, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Runtime.Serialization.Formatters.Soap, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
TickZoomPluginExamples, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomPluginCommon, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
ProviderCommon, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
ProviderUtilTests, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: nunit.framework, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: ProviderUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
TickZoomLoaderTests, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: nunit.framework, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: PluginLoader, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
ExamplesTest, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomPluginCommon, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: nunit.core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: nunit.core.interfaces, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomCharting, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomPresentation, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: WindowsFormsUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomPluginExamples, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomGUI, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomStarters, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: nunit.framework, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: TickZoomTickUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: ZedGraph, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
nunit.core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: nunit.core.interfaces, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
nunit.core.interfaces, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
LimeProviderUnitTests, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
TickZoomTesting, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomPluginCommon, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomPluginExamples, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomCharting, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: TickZoomStarters, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: nunit.framework, Version=2.5.1.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
    Reference: TickZoomTickUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: tzdata, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
TickZoomEngine, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomAPI1.0, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    Reference: TickZoomTickUtil, Version=1.4.8.8462, Culture=neutral, PublicKeyToken=null
    Reference: System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

【问题讨论】:

  • 异常是由 JIT 编译器抛出的,与反射无关。只需找到从程序集元数据中读取的类型中缺少的字段。这是一个runtime 问题,而不是构建问题。使用 fuslogvw.exe 并记录所有绑定以查看它在何处找到该程序集。
  • 啊...感谢您的洞察力。现在正在调查。
  • 嗯。 fuslogvw 显示所有绑定,但不显示此绑定或任何失败。这可能是因为该程序集是动态加载的。那么如何在动态加载程序集时获取绑定日志或失败信息呢?
  • 你在谈论我看不到的代码。但是当然,您很容易使用 Assembly.LoadFile() 或 Load(byte[]) 并传递错误的程序集。
  • 原来这些确实出现在 fuslogvw.exe 中。它正在加载正确的汇编路径,如查看器中所示,并通过单步执行和检查代码。我一次经历了每一个绑定,他们都说他们从正确的文件夹加载。但是,目录搜索显示了很多该程序集。我正在清理它们,看看是否有什么不同。

标签: c# debugging exception compilation release


【解决方案1】:

我也有这个问题。原来我的项目引用了两个 .dll,称它们为 A.dllB.dll

A.dll 也引用了B.dllB.dll 自从我上次构建项目以将某些字段更改为属性以来已更新。再次构建项目后,我遇到了此处描述的问题。

事实证明,自从 B.dll 更新后,A.dll 没有重新构建,A.dll 期待带有字段的 B.dll,但我的项目使用的是新建的 B.dll 属性。

【讨论】:

    【解决方案2】:

    只需将失败的方法移动到另一个 dll 中即可解决。所以现在它引用的字段在同一个 DLL 中。

    这仅仅意味着加载器逻辑在运行时绑定到固定结构字段时是不稳定的。

    【讨论】:

      【解决方案3】:

      比较引用的程序集(依赖项)的两个二进制清单(您编译的程序集)。

      System.Reflection.Assembly::GetReferencedAssemblies()
      

      并比较.. 编译它们的框架之间可能存在版本差异。

      【讨论】:

      • 感谢您的建议!我编辑了问题以包含所有看起来都很好的程序集和引用的转储。注意:我还在缩小范围的编辑中添加了问题,即在使用通过 Visual Studio 构建的程序集运行时,在命令行上通过 MSBuild 构建的程序集在运行时失败。相比之下,如果它们都以一种或另一种方式构建,则可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 2019-02-04
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多