.NET 3.5设计器添加图表后重开出现设计时错误求助
我之前也碰到过一模一样的问题——用.NET 3.5的Microsoft Chart Controls,设计器第一次操作完全正常,关闭重开就弹出一堆设计时错误,但代码编译、程序运行都没毛病。折腾了好一阵,总结出几个靠谱的解决办法,你可以挨个试试:
检查引用dll的「复制本地」属性
找到项目引用里的System.Web.DataVisualization(Web项目)或System.Windows.Forms.DataVisualization(WinForms项目),右键打开属性面板,把「复制本地」设置为True。原因是:运行时CLR可能从GAC找到这些dll,但设计器的加载环境不一样,需要这些dll在项目输出目录才能正常识别。清理并重建整个解决方案
先通过VS菜单执行「项目 -> 清理」,然后再「生成 -> 重建解决方案」。有时候设计器缓存了旧的组件信息,清理重建能强制刷新这些缓存,解决加载冲突。重置Visual Studio的设计器缓存
完全关闭VS,然后删除以下两个目录的文件(路径根据你的VS版本调整,比如VS2010对应10.0,VS2008是9.0):%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\[版本号]\Designer\ShadowCache%USERPROFILE%\AppData\Roaming\Microsoft\VisualStudio\[版本号]\ComponentModelCache
删除完重新打开VS和项目,设计器应该能正常加载了。
验证工具栏控件与项目引用的一致性
右键工具栏选择「选择项」,找到Chart相关控件,确认选中的dll路径和版本和项目引用的完全一致。如果不一致,先移除旧的,再重新添加项目引用里对应的dll到工具栏。手动编辑项目文件修正引用
如果以上方法都没用,直接打开项目的.csproj或.vbproj文件,找到Chart控件的引用节点,确保HintPath指向正确的dll路径,并且Private属性设为True(对应「复制本地」)。示例如下:<Reference Include="System.Windows.Forms.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\MicrosoftChartControls\lib\System.Windows.Forms.DataVisualization.dll</HintPath> <Private>True</Private> </Reference>保存后重新加载项目即可。
为什么会出现这种矛盾情况?
简单来说,设计器的运行上下文和程序运行时不一样:程序运行时,CLR会从GAC或者输出目录自动查找匹配的dll;但设计器是在VS进程内运行,它的组件加载机制更严格,一旦找不到正确版本的设计时组件或者dll路径不对,就会抛出错误,但代码本身语法和逻辑没问题,所以编译运行完全正常。
内容的提问来源于stack exchange,提问作者Yuri Zolotarev

