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,即将程序集编译为在任意平台上运行。)。
参考:C# 编译器选项