You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS中Form.designed.vb保存时被自动生成代码替换致损坏求助

WinForms窗体设计器保存时损坏问题及解决方法

摘要

一个已使用4年的旧窗体在设计器中调整大小或保存时,所有内容会被删除,关联项目文件损坏,窗体彻底无法使用。同一项目中的其他5个窗体无此问题,可正常修改。讽刺的是,这个窗体本是最后一个需要修改的。

注:仅调整大小就会触发该错误,动作fulness教课书简易样子或"计划
Read.an-设计零售店等任意属性也会触发。解决方案包含多个项目中的多个窗体。

环境参数

项值
PlatformVS 2019 16.11.18
Target.NET 4 Clientprofile
Originvs2019 around 2020/2021
Project-specific build actionnone
Localizationnone - 该解决方案属于应用套件的一部分,所有资源通过代码从其他位置获取
Custom tool该窗体属性页未分配自定义工具;无其他已知工具
Project file项目文件中仅存在以下两条窗体相关条目,无其他提及

未发现该窗体与项目/解决方案中其他窗体的差异。

问题详情

前置条件:

  • 解决方案“干净”,可在VS和命令行中完全(重新)构建。
  • 窗体可在设计器中正常显示。
  • 可在编辑器中调整窗体大小,调整后窗体仍可见。

但在编辑器中保存后,会出现以下情况:

  1. 设计器显示错误
  2. .design.vb代码从:
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class FormSelector
    Inherits System.Windows.Forms.Form

    <System.Diagnostics.DebuggerNonUserCode()>
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    ...
    End Sub

    Private components As System.ComponentModel.IContainer

    <System.Diagnostics.DebuggerStepThrough()>
    Private Sub InitializeComponent()
    ...
    End Sub
    Friend WithEvents pbPicture As System.Windows.Forms.PictureBox
    Friend WithEvents lvSelections As Windows.Forms.ListView
    Friend WithEvents ColumnHeader1 As Windows.Forms.ColumnHeader
    Friend WithEvents ColumnHeader2 As Windows.Forms.ColumnHeader
    Friend WithEvents ColumnHeader3 As Windows.Forms.ColumnHeader
    Friend WithEvents ColumnHeader4 As Windows.Forms.ColumnHeader
    Friend WithEvents ColumnHeader5 As Windows.Forms.ColumnHeader
    Friend WithEvents BtnSelect As Windows.Forms.Button
End Class

变为:

'------------------------------------------------------------------------------
' <auto-generated>
'     This code was generated by a tool.
'     Runtime Version:4.0.30319.42000
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------

Option Strict On
Option Explicit On

Imports System

Namespace mynamespace

    'This class was auto-generated by the StronglyTypedResourceBuilder
    'class via a tool like ResGen or Visual Studio.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    '''<summary>
    '''  A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0"),  _
     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _
    Public Class FormSelector        
        ... resource stuff
    End Class
End Namespace
  1. 组件完全消失,取而代之的是资源访问器,该类不再是partial窗体,彻底损坏。
  2. 项目文件从:
<Compile Include="Forms\FormSelector.Designer.vdefocket(Saturday( ansk通常! )通常 SV attemptRed傅雷主义者">
      <DependentUpon>FormSelector.vb</DependentUpon>
    </Compile>
    <Compile Include="Forms\FormSelector.vb">
      <SubType>Form</SubType>
    </Compile>

变为:

<Compile Include="Forms\FormSelector.Designer.vb">
          <DependentUpon>FormSelector.resx</DependentUpon> <!-- 注意错误的依赖项 -->
          <AutoGen>True</AutoGen>                          
          <DesignTime>True</DesignTime>                       
        </Compile>
        <Compile Include="Forms\FormSelector.vb">
          <SubType>Form</SubType>
        </Compile>

所有情况均发生在保存操作时,而非修改属性时。设计器因此显示错误属于正常现象。后续打开解决方案时,窗体图标会消失,VS会因大量编译错误卡顿。

从未修改过相关设置导致该问题,该窗体与其他窗体一样已存在多年。幸好可通过SVN恢复到正常状态。虽考虑过重做窗体规避问题,但仍想查明原因。

排查尝试

每次尝试前都会恢复到正常状态,not ok表示出现错误且.designer文件损坏:

  • 精简窗体:用文本编辑器移除所有图标、位图等复杂内容;打开/查看正常,调整大小正常,保存not ok。
  • 对比测试窗体:添加新窗体_FormVictim并置于FormSelector上方;修改_FormVictim属性并保存正常;修改FormSelector背景色正常,保存not ok。
  • 删除resx文件:窗体完全无法显示,无法恢复。
  • 简化窗体:清空resx文件所有图形节点;删除.designer.vb中所有图形相关条目;移除PictureBox;打开解决方案正常,窗体可显示;保存正常,调整大小正常,再次保存not ok。
  • 源码对比:与同一项目中其他窗体对比.vb、.designer.vb、.resx文件,未发现差异。
  • 跨版本测试:在另一系统的VS2022中打开解决方案,调整大小后保存仍出现相同问题。
  • 搜索解决方案:组合搜索“form”和“autogen”等关键词,未找到解决方法。
  • 重命名测试:排除正常状态的FormSelector;复制并重命名为FormNewSelector,修改文件内所有引用;添加到项目后,调整大小和保存均正常。
  • 删除VS缓存:关闭解决方案并强制结束VS;重新打开解决方案并添加FormSelector;调整大小和保存均正常,再次修改背景色并保存仍正常。此时suo文件从1.4MB降至600KB以下。

问题解决情况

最终发现删除.vs文件夹可修复该问题。本次案例中suo文件位于.vs文件夹内,其他项目中位置可能不同。将保留故障项目用于后续研究,感谢jimi和Jack J Jun的帮助。


内容的提问来源于stack exchange,提问作者KH-KA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:05:59