这是我在EncLib名称空间中的示例枚举:

public enum Channel { X = 0, Y }


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

文件结构示例如下所示:

c# - 对枚举类型名称的编辑未反射(reflect)在VS2015 * .settings文件C#中-LMLPHP

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

public enum EncoderChannel { X = 0, Y }


所做的更改不会反映在EncSettings.settings中。在对象浏览器中,下面显示的图片的左侧是EncLib
右侧是通过单击EncSettings.settings-> type dropdown menu-> Browse...EncLib打开的对话框:
c# - 对枚举类型名称的编辑未反射(reflect)在VS2015 * .settings文件C#中-LMLPHP

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

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

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



编辑:
已上载对象浏览器和设置页面中EncLib的并排视图。

如您所见,在设置页面中,名为EncoderChannel的变量的类型为Channel,而不是预期的EncoderChannel
c# - 对枚举类型名称的编辑未反射(reflect)在VS2015 * .settings文件C#中-LMLPHP



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



更新2:
我已经成功使VS2015崩溃,这似乎给了我一个提示,那就是这是一个错误,而不是我在这里丢失了一些步骤。崩溃VS2015的步骤:


EncSettings.Designer.cs中,将Channel更改为EncoderChannel
重建。
关闭VS2015,然后重新启动VS2015。
EncSettings.settings.cs中,单击type dropdown menu,然后选择Browse
单击EncLib,VS2015崩溃。


我认为这意味着VS2015已将Channel更新为EncoderChannel,但是由于某些原因,VS2015在尝试提供更新时会崩溃。



更新3:
我已经尝试了多种方法来修复崩溃,但是我无法成功。我不得不回滚到源代码管理的上一次提交。避免执行更新2中提到的步骤。

最佳答案

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


封闭的解决方案。
转到项目目录。
用文本编辑器打开EncSettings.settings
更改以下行:

<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>

用文本编辑器打开EncSettings.Designer.cs
更改以下行:

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;
    }
}

使用文本编辑器打开app.config,然后检查以下行是否退出:

<setting name="EncoderChannel" serializeAs="String">
    <value>Y</value>
</setting>



做完了!



更新:

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


EncSettings.settings中,将变量的类型更改为其他类型,例如string
重建并忽略所有错误。
封闭的解决方案。
重新打开解决方案。
现在在设置中显示EncoderChannel而不是Channel。将string更改为EncoderChannel


做完了!

10-08 03:37