为啥我无法从与设置文件相同的项目/程序集中为设置选择自定义类型?

Posted

技术标签:

【中文标题】为啥我无法从与设置文件相同的项目/程序集中为设置选择自定义类型?【英文标题】:Why am I unable to select a custom Type for a setting from the same project/assembly as the settings file?为什么我无法从与设置文件相同的项目/程序集中为设置选择自定义类型? 【发布时间】:2011-05-01 19:52:06 【问题描述】:

我正在尝试将应用程序设置属性的类型设置为我在程序集中定义的自定义枚举类型(称为此项目 A)

在设置浏览器中,我单击浏览并出现“选择类型”对话框。

项目 A 中定义的类型似乎对我不可用。然而,类型可从 A 引用的其他项目中获得。

我几乎无法理解,无法使用基础项目中定义的类型,所以我认为我做错了什么。我已经尝试过构建、清理、重建、重新启动,但没有任何运气,那么我到底错过了什么?

编辑:截图在这里http://tinypic.com/r/2ls8myb/7

【问题讨论】:

Using own enum in settings的可能重复 对于它的价值,我在 2010 年 10 月问了这个问题,然后在 2011 年 8 月问了using own enum in settings,所以当时我很难找到这个问题。 【参考方案1】:

我试图在 VS 2010 (.net 3.5) 中做同样的事情。事实证明,您可以使用设置设计器执行此操作。如前所述,UI 是完全有缺陷的,但如果您在“浏览”窗口中手动输入枚举的完全限定名称,它将起作用。这样做的好处是不修改生成的代码 (*.Designer.cs),这是最好避免的,因为当您这样做时,无法保证您所做的更改不会被覆盖。

PS - 这似乎只在枚举是公开的情况下才有效。

设置界面:

然后手动输入完全限定的类型名称:

有一次我发誓我在 Value 列中看到了枚举值的下拉列表,但从那以后我再也没有看到它,您只需在其中输入一个适当的值。

【讨论】:

万一这对任何人都不起作用,请尝试确保自定义类型是公开的。 只是为了确认一下:我也看到了你提到的下拉菜单,但它不再显示了......真棒在 WPF 中微不足道的事情会变得非常困难:( 我觉得这种方法比手动编辑Settings.settings文件更简单快捷。【参考方案2】:

我也无法浏览到我的自定义类型。我可以通过在文本编辑器中打开 Settings.settings 文件并将设置添加到 Settings 部分来添加我的自定义类型,如下所示:

<Setting Name="Options" Type="MyProject.MyOptions" Scope="User">
  <Value Profile="(Default)" />
</Setting>

设置设计器在我打开它时会抱怨,但我只是对该对话框回答“否”,并且我可以在我的项目中使用自定义设置。

【讨论】:

这对我有用,但由于某种原因我无法理解@Sean 的解决方案不起作用。 嗯,它几乎奏效了。但是VS根本没有将设置序列化到app.config文件中,也就是说不能在运行时设置。【参考方案3】:

因为你自己的类型是不可序列化的。使其可序列化,您可以在设置中定义它。

【讨论】:

嗨。我将类型标记为可序列化。经过清理和重建后,它仍然不可见。请问为什么其他程序集中没有标记为可序列化的其他类型在类型浏览器中可见?【参考方案4】:

我也在尝试,解决方案非常简单:先构建。

我添加了一个枚举类,定义了一些值,然后尝试用我的新枚举替换 Settings.settings 文件中的一个 int 值,因此我以后不必匹配该值。找不到类型。因为我还没有构建。

一旦新的枚举类型已知并且可以使用,在构建之后:)

【讨论】:

以上是关于为啥我无法从与设置文件相同的项目/程序集中为设置选择自定义类型?的主要内容,如果未能解决你的问题,请参考以下文章

C++/CLI 为啥对托管不可见

为啥我无法在 CListBox 中获取所选项目? MFC

为啥打开word是提示说由于宏安全设置,无法找到宏或宏被禁用

为啥 .net 配置设置被编译成程序集?

从与 eclipse 相同的控制台运行 maven 命令

服务引用 - 为啥在引用的程序集中重用类型