对枚举类型名称的编辑不会反映在VS2015 * .settings文件C#中

时间:2017-04-15 23:42:11

标签: c# visual-studio visual-studio-2015

以下是EncLib命名空间中的枚举示例:

public enum Channel { X = 0, Y }

在同一个解决方案中,我有另一个名称空间StmLib引用EncLib,并且在EncSettings.settings中有一个类型为Channel的变量。

示例文件结构如下所示:

Example file structure

现在,如果我将枚举重命名为EncoderChannel

public enum EncoderChannel { X = 0, Y }

更改未反映在EncSettings.settings中。在下面显示的图片的左侧是对象浏览器中的EncLib。 在右侧是单击EncSettings.settings - >从type dropdown menu打开的对话框。 Browse... - > EncLibChange is not reflected in EncSettings.settings

我尝试过Rebuild和Clean-> Build,结果是一样的。

我也很清楚我可以打开EncSettings.Designer.cs文件并将Channel更改为EncoderChannel,但这不会对设置文件进行任何更改。这意味着每次保存EncSettings.settings时,我都必须进行此编辑,因为保存将更新设计器文件以匹配设置文件中显示的内容。

任何建议和帮助表示赞赏。

修改 已上传对象浏览器和设置页面中EncLib的并排视图。

如您所见,在设置页面中,名为EncoderChannel的变量的类型为Channel,而不是预期的EncoderChannelA side-by-side view of the object browser and settings file

更新1: 我尝试删除EncLib引用并重新引用它。这并没有解决问题。

更新2: 我已经成功地崩溃了VS2015,这似乎给了我一个提示,这是一个错误,而不是我在这里错过了一些步骤。 VS2015崩溃的程序:

  1. EncSettings.Designer.cs中,将Channel更改为EncoderChannel
  2. 重新构建。
  3. 关闭VS2015并重新启动VS2015。
  4. EncSettings.settings.cs中,点击type dropdown menu,选择Browse
  5. 点击EncLib和VS2015崩溃。
  6. 我认为这意味着VS2015已将Channel更新为EncoderChannel,但出于某种原因,VS2015在尝试提供更新时崩溃。

    UPDATE3: 我已经尝试了很多方法来修复崩溃,但我无法成功。我不得不从源代码控制回滚到先前的提交。避免遵循Update 2中提到的步骤。

1 个答案:

答案 0 :(得分:1)

经过一番尝试,我发现自己是一个简单的解决方案:

  1. 关闭解决方案。
  2. 转到项目目录。
  3. 使用文本编辑器打开EncSettings.settings
  4. 更改以下行:

    <Setting Name="EncoderChannel" Type="EncLib.Channel" Scope="User">
    <Value Profile="(Default)">Y</Value>
    

    <Setting Name="EncoderChannel" Type="EncLib.EncoderChannel" Scope="User">
    <Value Profile="(Default)">Y</Value>
    
  5. 使用文本编辑器打开EncSettings.Designer.cs

  6. 更改以下行:

    public global::EncLib.Channel EncoderChannel {
        get {
            return ((global::EncLib.Channel)(this["EncoderChannel"]));
        }
        set {
            this["EncoderChannel"] = value;
        }
    }
    

    public global::EncLib.EncoderChannel EncoderChannel {
        get {
            return ((global::EncLib.EncoderChannel)(this["EncoderChannel"]));
        }
        set {
            this["EncoderChannel"] = value;
        }
    }
    
  7. 使用文本编辑器打开app.config并检查下面的行是否退出:

    <setting name="EncoderChannel" serializeAs="String">
        <value>Y</value>
    </setting>
    
  8. 完成!

    <强>更新

    我刚刚找到了更整洁的解决方案:

    1. EncSettings.settings中,将变量的类型更改为其他内容,例如string
    2. 重建并忽略所有错误。
    3. 关闭解决方案。
    4. 重新开放解决方案。
    5. 在设置中显示EncoderChannel而不是Channel。将string更改为EncoderChannel
    6. 完成!