vs2010调试时发生监视显示表达式为false,但却进入了if块中








今天调试一段示例代码sample.scheduler时发现了这样的问题:明明表达式为false,单步执行却进入了代码块,最初以为是某些缓存的pdb文件或者是gac引起,删除所有项目下bin,obj目录,查找是否有gac项目,但发现没有签名项目,bin,obj目录删除后仍然不行。
 
 
 
虽然确信从程序启动到异常抛出没有多线程的代码,但经过一整天的调试后终于下决心从程序开始一步步单语句跟进,漫长的……4个小时跟了3遍还是没察觉出哪里有问题。
 
 
 
这时天昏地暗啊……
 
 
 
 
 
突然灵光闪现,我将Console的项目刚刚从08转到了2010,但lib使用的是以前的2010项目,发现Console项目属性》生成》目标平台是 x64,但其依赖的2个类库均为AnyCpu ,修改所有项目生成目标平台为x86后,问题解决。
 
 
 
然后继续尝试是否可以使用x64, 居然编译报错:
 
错误 1 视为错误的警告: 程序集生成 -- 引用的程序集“System.Data.dll”针对其他处理器 Quartz.2010
错误 2 视为错误的警告: 程序集生成 -- 引用的程序集“mscorlib.dll”针对其他处理器 Quartz.2010
错误 3 视为错误的警告: 程序集生成 -- 引用的程序集“System.Web.dll”针对其他处理器 Quartz.2010
 
百思不得其解? data和web不支持x64吗? 那mscorlib也不支持那就疯掉了吧,这不等于说明.net不支持x64平台吗?那出这个选项作何?希望达人指教我一下。
 
 
 
再尝试anycpu选项,编译成功但运行出错。
 
 
 
相关资料解释:
 
遇到的问题:
 
  错误信息:
 
      错误 1  视为错误的警告: 程序集生成 -- 引用的程序集“System.Data.dll”针对其他处理器
 
      错误 2  视为错误的警告: 程序集生成 -- 引用的程序集“mscorlib.dll”针对其他处理器
 
  解决办法:
 
      选定项目,选择“属性”—“生成”,将“将警告视为错误”设为“无”。
 






  错误信息:
 
      错误  121  “sgen.exe”已退出,代码为 1。
 
  解决办法:
 
      选定web项目,右键选择“属性”—“生成”,将“生成序列化程序集”设成“关闭”。
 














  以上方法虽然最终得到了x64平台的程序,但是在64位服务器上运行一直有错误。
 
  最终的解决办法是使用anycpu选项来编译(其实默认就是anycpu,即将程序集编译为在任意平台上运行。)。