找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”

本文详细介绍了在使用ASP.NET结合EXT.NET 1.0版本时,遇到找不到方法 'Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()' 错误的解决方案。通过下载并安装 .NET Framework 3.5 SP1 后,问题得到解决。避免在 Google 搜索范围过大,建议使用百度或 Bing 进行搜索。

转载自:http://hi.baidu.com/thought007/blog/item/62a745ca8b6a7e34b700c87d.html

 

出现问题 别在Google里面搜的 范围太大

还是老老实实用百度或bing吧

真的 很好用

 

这个错误出先在ASP.NET使用EXT.NET 1.0(注意版本,好像是在1.0版本下才会报错,0.8的我没遇到过)的过程里,在家里可以用,带到公司就报错:找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”,首先想到的就是 Framework的问题,查看事件管理器,发现有警告
进程信息: 
进程 ID: 1724 
进程名: WebDev.WebServer.EXE 
帐户名: DRAGON/Administrator 

异常信息: 
异常类型: MissingMethodException 
异常消息: 找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”。




解决方法:
 下载安装.framework 3.5 sp1 重启机器后问题解决。
我正在下载 希望此问题能解决 搞我一天 头都快炸了 郁闷...
应用程序: SimpleVisionBuilder.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止。异常信息: System.AccessViolationException 在 <Module>.ccComanagedPersistence.SaveObjectData(IUnknown*, System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) 在 Cognex.VisionPro.CogImage8Root.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) 在 Cognex.VisionPro.CogImage8Root.System::Runtime::Serialization::ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(System.Object, System.Runtime.Serialization.ISurrogateSelector, System.Runtime.Serialization.StreamingContext, System.Runtime.Serialization.Formatters.Binary.SerObjectInfoInit, System.Runtime.Serialization.IFormatterConverter, System.Runtime.Serialization.Formatters.Binary.ObjectWriter, System.Runtime.Serialization.SerializationBinder) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo, System.Runtime.Serialization.Formatters.Binary.NameInfo, System.Runtime.Serialization.Formatters.Binary.NameInfo) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(System.Object, System.Runtime.Remoting.Messaging.Header[], System.Runtime.Serialization.Formatters.Binary.__BinaryWriter, Boolean) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream, System.Object, System.Runtime.Remoting.Messaging.Header[], Boolean) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream, System.Object) 在 Cognex.VisionPro.CogSerializer.SaveObjectToStream(System.Object, System.IO.Stream, System.Type, Cognex.VisionPro.CogSerializationOptionsConstants, System.Runtime.Serialization.StreamingContextStates) 在 Cognex.VisionPro.CogSerializer.SaveObjectToFile(System.Object, System.String, System.Type, Cognex.VisionPro.CogSerializationOptionsConstants) 在 SimpleVisionBuilder.FormVisionSettings.SafeSaveCognexObject(System.Object, System.String, System.Windows.Forms.Control) 在 SimpleVisionBuilder.FormVisionSettings.btn_SaveSettings_Click(System.Object, System.EventArgs) 在 System.Windows.Forms.Control.OnClick(System.EventArgs) 在 System.Windows.Forms.Button.OnClick(System.EventArgs) 在 System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs) 在 System.Windows.Forms.Control.WmMouseUp(System.Windows.Forms.Message ByRef, System.Windows.Forms.MouseButtons, Int32) 在 System.Windows.Forms.Control.WndProc(System.Windows.Forms.Message ByRef) 在 System.Windows.Forms.ButtonBase.WndProc(System.Windows.Forms.Message ByRef) 在 System.Windows.Forms.Button.WndProc(System.Windows.Forms.Message ByRef) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr, Int32, IntPtr, IntPtr) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef) 在 System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32) 在 System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext) 在 System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext) 在 SimpleVisionBuilder.Program.Main()
最新发布
08-27
在使用 Cognex VisionPro 进行开发时,调用 `CogSerializer.SaveObjectToFile` 方法保存对象数据时抛出 `System.AccessViolationException` 异常,通常表明程序试图访问受保护的内存区域,这可能是由于底层非托管代码访问了无效的内存地址,或资源未正确释放导致的。 ### 异常原因分析 1. **对象未正确初始化或已释放** 在调用 `SaveObjectToFile` 方法之前,若尝试保存的对象未正确初始化,或已经被释放(调用了 `Dispose()`),可能导致访问非法内存地址。确保对象在整个生命周期内保持有效状态[^1]。 2. **多线程环境下资源竞争** 如果在多线程环境中操作 VisionPro 对象,例如在非主线程中调用 `SaveObjectToFile`,且未进行适当的同步控制,可能会导致访问冲突。建议将涉及 VisionPro 对象的操作限制在主线程中,或使用锁机制确保线程安全。 3. **VisionPro 运行时环境未正确初始化** VisionPro 的运行时环境需要在程序启动时显式初始化(如 `CogRunTime.Open()`)。若未正确打开运行时环境,或在运行时关闭后仍尝试执行保存操作,也可能导致此异常。确保在调用任何 VisionPro 方法前调用 `CogRunTime.Open()`,并在程序退出前调用 `CogRunTime.Close()` [^1]。 4. **文件路径或权限问题** `SaveObjectToFile` 方法依赖于文件系统操作,若目标文件路径无效、路径中包含非法字符,或程序没有写入权限,也可能引发异常。应验证文件路径的有效性,并确保程序具有写入权限。 5. **VisionPro 版本兼容性问题** 不同版本的 VisionPro 可能对序列化机制有差异,若保存的对象包含不支持的类型或结构,也可能导致异常。建议查阅对应版本的官方文档,确认所保存对象的兼容性。 ### 解决方案建议 - **检查对象状态** 在调用 `SaveObjectToFile` 前,确认对象未被释放且处于有效状态。例如: ```csharp if (myToolGroup != null && !myToolGroup.IsDisposed) { CogSerializer.SaveObjectToFile(myToolGroup, "C:\\VisionPro\\SavedToolGroup.cogx"); } ``` - **确保运行时环境已初始化** 在程序开始时显式调用 `CogRunTime.Open()`,并在程序结束时调用 `CogRunTime.Close()`,确保运行时环境的正确管理[^1]。 - **避免多线程直接访问 VisionPro 对象** 若需在多线程环境中操作 VisionPro 对象,应使用 `Invoke` 或 `Dispatcher` 将操作调度到主线程执行,避免直接在子线程中调用 VisionPro API。 - **验证文件路径和权限** 确保目标路径存在且程序具有写入权限。可以使用 `System.IO.File.Exists` 和 `System.IO.Directory.Exists` 检查路径有效性。 - **更新 VisionPro 版本** 若问题持续存在,建议升级至最新版本的 VisionPro,以修复可能存在的已知缺陷。 ### 示例代码:安全调用 SaveObjectToFile ```csharp try { // 确保运行时环境已打开 CogRunTime cogRunTime = new CogRunTime(); cogRunTime.Open(); // 加载并操作视觉工具组 CogToolGroup myToolGroup = new CogToolGroup(); myToolGroup.Load("C:\\VisionPro\\ToolGroup.cogx"); // 保存对象前检查对象状态 if (myToolGroup != null && !myToolGroup.IsDisposed) { CogSerializer.SaveObjectToFile(myToolGroup, "C:\\VisionPro\\SavedToolGroup.cogx"); } // 清理资源 myToolGroup.Dispose(); cogRunTime.Close(); } catch (System.AccessViolationException ex) { Console.WriteLine("Access violation occurred: " + ex.Message); // 日志记录或用户提示 } catch (Exception ex) { Console.WriteLine("An error occurred: " + ex.Message); } ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值