当前上下文中不存在Properties属性。

42

我需要将一些字符串存储在我的项目的设置文件中。然而,我无法访问设置文件以存储这些字符串。

我曾经在早期的项目中访问过属性文件,没有遇到任何存储值的问题。

Properties.Settings.Default.test = ...
MyApp.Properties.Settings.Default.test = ...

但是,在当前项目中,我一直被错误提示 Properties does not exist in the current context 所困扰。 是否有任何更改过的设置或其他原因导致Intellisense中不再显示Properties


你能检查一下.settings文件的代码生成吗? - Adriano Repetti
@Adriano: Settings.settings 文件属性。代码生成器:SettingsSingleFileGenerator,settings.cs 文件正常生成。 - Cipher
14个回答

55

我曾经在拷贝粘贴插件代码时遇到过同样的问题。后来发现我在复制代码时不小心保留了另一个项目的命名空间。将命名空间更改为正确的项目后,我就能够使用相关的属性了。


8
查看项目中所有命名空间的简单方法是在Visual Studio中打开“类视图”。在旧的命名空间中打开一个文件并重构名称。 - downeyt

22

在编译时,Visual Studio会生成一个C#类,允许访问用户和应用程序设置。生成的类定义在项目设置中指定的默认命名空间中。

  • 您可能需要在访问属性命名空间时使用项目设置中定义的默认命名空间前缀;
  • 或者您可以更改默认命名空间:转到项目设置,应用程序选项卡,并编辑项目的默认命名空间。

1
这完全解决了我的问题,我只需要将默认命名空间更改为与我正在使用代码的类中的命名空间匹配即可。谢谢! - David C
这个答案真的帮了我很多!我在项目中修改了命名空间,但它与类中的稍有不同。 - MrMohr

15

请确保您的项目 拥有 一个设置文件,方法是进入项目属性并点击“设置”选项卡。如果没有设置文件,系统会提示您并提供创建一个的选项。


当您进入项目属性->设置时,您的项目是否识别设置文件? - Daniel Hilgarth
是的,它可以。我可以在这里手动输入字符串,但是这些无法在我的MainWindow.xaml.cs代码中访问。 - Cipher
2
这就是解决我的问题的方法!当我按照你所描述的创建了设置文件后,“Properties”对象就进入了范围。谢谢。 - Sabuncu
2
这个方法解决了我的问题,之前我在尝试重新构建时可能因为另一个工具打开了其中一个资源文件而搞砸了。我还不得不删除仍然显示的资源文件并重新添加它们。 - B H
尽管链接“创建或打开应用程序设置”识别到了一个Settings.settings文件,但只有在删除该设置文件后,代码才能编译通过。然后,通过单击链接,在“属性”文件夹下创建该文件,从而使Properties.Settings.Default可访问。 - Denis G. Labrecque
显示剩余2条评论

5

当我在项目属性中错误地将错误的命名空间作为默认命名空间时,出现了这个错误。

要选择默认命名空间,请右键单击解决方案资源管理器中的项目,然后选择“属性”->“应用程序”选项卡->“默认命名空间”,检查它是否与您的 .cs 文件的命名空间匹配:

[...]
using System.Text;
using System.Threading;

    namespace Correct.Namespace //<-- should match Default namespace field
    {
        static class Program
        {
            [...]

4

首先,如果您的项目是测试环境,尝试从头开始重新创建项目。这一步将正确地重新创建默认名称空间。如果您对名称空间配置有信心,则可以跳过此步骤。

其次,如果您仍然遇到属性无法识别的问题,例如在我的示例中,我正在尝试从sqlCon获取数据。

string connectionString = Properties.Settings.Default.sqlCon;

这里输入图片描述

进入 项目(Project) -> 事件和委托(Properties),如下图所示。确保创建默认设置文件。

这里输入图片描述

一旦在应用程序设置(Application settings)下创建了默认设置(例如,在我的情况下是SQL连接变量),Properties 错误将消失。

这里输入图片描述


4

在我的情况下,我引用了一个具有内部/公共访问修饰符的资源。我将其访问修饰符更改为Public,并且问题得到解决。


这也是我的问题,此外我需要在属性方法之外声明属性变量,才能让set访问器识别它。 - Doreen

3
我也遇到了同样的问题。但这个问题是在我向已定义的设置文件(很久以前创建的)中添加新设置时出现的。不知何故,将设置添加到设置文件中使得Visual Studio更改了该设置的命名空间为项目默认命名空间(自上次修改设置后已更改)。因此,由于设置访问修饰符设置为Internal,并且尝试访问设置的类仍位于旧的命名空间中(虽然仍在同一个项目中),所以从该类中看来,设置变得不可见。

2

我能提供的最快解决方案是双击您的resources.resx文件(如果存在),然后更改窗口顶部的Access Modifier属性从Internal到Public,重新编译,这样应该可以成功编译,然后将其切换回内部并再次重新构建。之后应该就没问题了。


0

在我的情况下,我正在从另一个项目(B)引用一个项目(A)。两者都在同一个解决方案中。

  • A有一个公共类(AClass),其中包含一个公共静态方法(AMethod)。
  • 我想测试这个AClass.AMethod(...)的结果
  • Visual Studio在调用AClass.AMethod(...)时“着色”了AClass
  • 我可以右键单击AClass并选择“转到定义”,

    • 如果我将引用添加到“解决方案”项目,则会直接带我到源代码
    • 如果我将引用添加到通过构建项目“A”创建的DLL“概述”中,则会带我到该DLL
  • 但是,当我尝试构建项目“B”时,我收到错误消息“当前上下文中不存在AClass”

  • 原来项目B的目标是4.5,而项目A的目标是4.5.2
  • 这个答案很有帮助:https://dev59.com/SWYq5IYBdhLWcg3woB0W#15556365

0

请确保您在Settings.Designer.cs文件中可以看到您的设置。如果没有,请尝试删除并重新输入该设置。由于某些原因,有时工具自动生成的代码不包括您的设置。在这种情况下,该设置将无法在智能感知中使用。


1
请不要在多个问题中发布相同的答案。发表一个好的答案,然后投票/标记关闭其他问题作为重复。如果问题不是重复的,请根据问题量身定制您的答案。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接