在应用程序配置文件中找不到名为“x”的连接字符串…但它有效吗?

我已经看到了几个与这个错误有关的不同问题,但似乎没有一个我正在经历的。 我刚刚在CodeProject.com上关注了一个简单的项目教程,以便更好地理解使用MVVM模式和entity framework( http://www.codeproject.com/Articles/873592/Tutorial-for-a-Basic-WPF -MVVM-Project-Using-Entity )。 我直接跟着它,一切似乎都很完美。

但是我有点好奇并开始改变一些事情。 我想了解更多关于命名空间如何在XAML中工作的内容,因此我将MainWindowViewModel移动到一个名为ViewModels的新文件夹中。 然后我在我的XAML中添加了一个名为“vms”的新命名空间,其中包含适当的位置,并为窗口设置了我的数据上下文:

    

但是当我这样做时,我在Visual Studio中得到一个浅蓝色下划线警告,显示“在应用程序配置文件中找不到名为[myEntities]的连接字符串。” 但是App.config文件中存在连接字符串,当我构建并运行程序时,它按预期工作。

有关为什么会发生这种情况的任何想法?

您在视图中声明了视图模型的实例。 这导致VS在编辑器中实例化您的类,而编辑器又在VS进程中运行构造函数代码。

您的构造函数正在尝试连接到数据库。 它正在app.config文件中查找当前正在运行的进程的连接字符串。 当前运行的进程是Visual Studio。 我不相信有一个devenv.exe.config文件,如果有,它肯定没有你的连接字符串(并且,请不要创建一个并将你的连接器放在那里!)。

您的代码出错,编辑器旨在捕获UI组件中的错误并在UI中显示警告。 它正在为您的代码执行此操作。

解决方案是不在构造函数中执行工作。 你真的不应该在那里做长期运行的操作。 您应该移动数据库逻辑的位置只能由您和您的应用程序设计决定。

另一种方法是接受这种情况,并更好地处理您的错误。 也许记录缺少的连接字符串。 或者抓住exception并继续前进。 那里不是最好的设计决定。

另一种解决方案是不以这种方式设置DataContext。 在代码隐藏中创建它并在那里分配它。 这样,您可以执行检查以查看您是否在设计人员中并完全跳过该过程。

最后选择:没有伤害,没有犯规。 忘记设计师的错误。 它至少不会损害您的应用程序。 继续进行更重要的任务。

构建应用程序并在编辑器模式下工作是编辑器的两种不同活动。 编辑器必须在代码可以成功编译和失败状态的状态下解析/构建代码; 每次必须给出最终结果 ; 好像你已经编译和构建了应用程序。

将我的MainWindowViewModel移动到一个新文件夹中

由于您移动了位置,因此完整构建编译将链接到创建应用程序所需的部分,并且您认为它可以正常工作。 但是对于编辑器来说,当它解析位于顶层的MainWindowViewModel时,它可能具有app.config的缓存版本位置,该位置位于父级而不是新级别。

无论其编辑器处理启发式是否导致找不到移动文件的当前位置的文件。

Microsoft在其网站上声称这是一个entity framework问题。 然而,我(和其他人)发现了一些奇怪的东西。 当您关闭导致错误的文件时,错误本身也会消失。 我不确定这是否是VS的正常行为,或者其他原因是什么。

如果你将datacontext放在代码隐藏中并从XAML文件中删除datacontext,那么错误也就消失了,它仍然编译得很好。

 DataContext = new MainWindowViewModel(); 

我总是试图让我的代码隐藏空洞,但据我所知,在这种情况下几乎没有任何缺点。