如何通过创建模式来修复“找不到属性/元素的模式信息”错误

158

我有一个使用C#和VS2010编写的Windows窗体应用程序,在app.config文件中遇到以下错误:

Message 4   Could not find schema information for the attribute 'name'
Message 8   Could not find schema information for the attribute 'name'
Message 12  Could not find schema information for the attribute 'name'
Message 5   Could not find schema information for the attribute 'serializeAs'
Message 15  Could not find schema information for the element 'CCP_Utility.Settings1'
Message 2   Could not find schema information for the element 'CCP_Utility.Properties.Settings'
Message 3   Could not find schema information for the element 'setting'
Message 1   Could not find schema information for the element 'userSettings'
Message 6   Could not find schema information for the element 'value'

我需要在代码中修改什么才能解决这个问题?我在哪里可以编辑CCP_Utility.Settings1CCP_Utility.Properties.Settings

以下是app.config的代码:

<configuration>
<configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="CCP_Utility.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        <section name="CCP_Utility.Settings1" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
  </configSections>
<userSettings>
  <CCP_Utility.Properties.Settings>
    <setting name="SourceDir" serializeAs="String">
      <value />
    </setting>
    <setting name="TargetDir" serializeAs="String">
      <value />
    </setting>
    <setting name="CorpID" serializeAs="String">
      <value />
    </setting>
  </CCP_Utility.Properties.Settings>
    <CCP_Utility.Settings1>
        <setting name="sourceDir" serializeAs="String">
            <value />
        </setting>
        <setting name="targetDir" serializeAs="String">
            <value />
        </setting>
    </CCP_Utility.Settings1>

   </userSettings>
</configuration>

这看起来像是一个重复的问题:https://dev59.com/QXVC5IYBdhLWcg3wz0h9。请检查@user57433的答案。 - rsbarro
@rsbarro,EntLib配置工具和DotNetConfig.xsd文件位于哪里? - Brian McCarthy
抱歉,我没有意识到用户对问题发布了两个答案。我参考的是第二个答案。那个答案虽然正确,但有点不清楚,所以我在下面提供了更详细的答案。 - rsbarro
1
谢谢,rsbarro!StingyJack最初的问题仅限于使用企业库配置部分时出现的错误,而不仅仅是任何自定义配置部分。 - Lisa
10个回答

228

最快、最简单的解决问题的方法:

  1. 在“解决方案资源管理器”中右键单击项目图标并选择“属性”。
  2. 转到“应用程序”选项卡,选择较早的.NET目标框架。
  3. 保存更改。
  4. 转到“应用程序”选项卡,选择最初的.NET目标框架。
  5. 保存更改 => 问题已解决!

5
第一次尝试可能不会成功。我需要做两次才能在VS 2013 Express中使其正常工作。 - H2ONaCl
25
在我的 Visual Studio 2015 上起作用。如果有人能解释一下为什么就好了。 - Jonathan Wood
1
在我的VS 2013专业版中无法工作。这个解决方法可能是最懒的,但它既不快速也不容易,因为它没有任何效果。 - datps
6
无法工作,使用VS2015更新2和.NET 4.5.2。看起来它似乎能够去除这些错误消息,但是如果你再次打开XML文件,它们就会重新出现。 - Snoop
1
那个可行,谢谢。 或者你可以更改框架,然后再恢复之前的版本。 - Zimo
显示剩余7条评论

181

2015年9月更新
由于该回答似乎对某些人有所帮助,因此我将保留它,但请先查看@reexmonkey@Pressacco的其他答案。他们可能会提供更好的结果。

原始回答
尝试以下步骤:

  1. 在Visual Studio中打开您的app.config或web.config文件。
  2. 转到“XML”菜单并选择“创建模式”。此操作应创建一个名为“app.xsd”或“web.xsd”的新文件。
  3. 将该文件保存到您的磁盘中。
  4. 返回到您的app.config或web.config,并在编辑窗口中右键单击并选择属性。从那里,确保刚刚生成的xsd在Schemas属性中被引用。如果没有,请添加它。

这样应该可以使这些消息消失。

我将我的web.xsd保存在我的Web文件夹的根目录中(这可能不是最好的位置,但仅用于演示目的),我的Schemas属性如下:

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\xml\Schemas\DotNetConfig.xsd" "Web.xsd"


11
@rsbarro,感谢您的回复!为什么你有两个xsd文件?我创建了模式,并只得到了一个文件- app.xsd,我将其保存到根目录。错误消失了,但现在我收到一个警告:“全局元素'configuration'已经被声明”。有任何修复此问题的想法吗? - Brian McCarthy
2
只需使用“属性”对话框选择您的模式或添加另一个模式。当您查看app.config时,在编辑器窗口中右键单击并选择“属性”。您应该在弹出的“属性编辑器”控件中看到模式。此外,如果您单击模式中的“...”按钮,它会让您使用漂亮的GUI选择要用于配置文件的模式。 - rsbarro
3
谢谢。这个方法可行,但有没有一个好的地方可以阅读来了解为什么会发生这种情况?似乎突然需要为我的 web.config 生成模式,这是在添加了大量 DotNetOpenAuth 内容并从头重新生成 edmx 文件后发生的。从某种程度上讲,“你更改了很多东西,所以某些东西出了问题”是有道理的,但知道为什么 web.config 文件会自动需要一个模式会很有帮助。 - froggythefrog
6
生成 Web.xsd 文件时,只包括您在 web/app.config 部分(用户部分)添加的模式。排除所有已经在默认模式或其他 .xsd 中包含的模式。请注意保持原文意思,使翻译更加通俗易懂。 - Pagotti
11
不行不行不行!!这不是“解决方案”,因为它甚至都不是真正的问题。请查看并投票支持@pressacco的答案。reexmonkey的答案也可以。 为什么这个答案会得到这么多好评?
  1. 直接忽略!关闭app.config或web.config文件,进行编译后你就看不到这些消息了。
  2. 虽然没有必要,但可以通过右键单击.config属性来修正VS提供的XSD路径。(@pressacco的答案)
  3. 或者:更改项目设置中的DotNet版本两次。可能会导致软件包更新出现问题。
- pashute
显示剩余9条评论

22

EntLib 5附带了一个XSD文件,并安装在Visual Studio模式目录中。在我的情况下,可以在以下位置找到它:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas\EnterpriseLibrary.Configuration.xsd

上下文

  • Visual Studio 2010
  • Enterprise Library 5

消除警告的步骤

  1. 在您的Visual Studio项目中打开app.config
  2. 在XML文档编辑器中右键单击,选择“属性”
  3. 添加完全限定的路径到“EnterpriseLibrary.Configuration.xsd”

附言

值得重申的是,这些“错误列表”、“消息”(“找不到元素的模式信息”)只有在您打开app.config文件时才可见。如果您“关闭所有文档”并编译...将不会报告任何消息。


抱歉,我可能漏掉了什么,您所说的“添加路径到完全限定路径的EnterpriseLibrary.Configuration.xsd”是什么意思? - Paul C
1
我所说的完全限定路径是指:使用绝对路径。例如 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas\EnterpriseLibrary.Configuration.xsd。在 Windows 操作系统上,相对路径可以包括 .\ 和 ..\ 字符。 - Pressacco
相关帖子可在以下链接找到:link - Pressacco
9
在Visual Studio 2015中是否缺少EnterpriseLibrary.Configuration.xsd文件? - Luke
1
谢谢@Taegost,这对我也有用。 (我的问题是在VS2013下的代码分析自定义字典,与所述略有不同,但症状相同)。 我尝试过的其他任何方法都没有起作用,这让我发疯了。 当我在编辑器中打开字典时,由于这些错误,似乎代码分析工具甚至没有使用它! - sn00gan

2
当您的项目引用过时的模式时,就会出现此错误。使用Visual Studio生成新的模式。
在Visual Studio中,执行以下操作:
  1. 打开您的app.configweb.config文件。
  2. 转到XML菜单并选择创建模式

这将触发生成app#.xsd(Windows应用程序)或web#.xsd(网站)文件。

  1. 将新生成的xsd文件保存到项目的根目录中。
    • 打开App.configweb.config文件,在文本编辑器中右键单击,选择属性,然后单击值为Schemas旁边的...按钮。
    • 使用添加按钮添加新生成的xsd文件。
    • 单击确定
无法找到属性/元素的模式信息错误现在应该已解决。

1

我发现相关模块有语法错误,导致编译失败 - 编译器没有告诉我这个问题。只是给了一个关于app.config的错误。使用VS2010。一旦我修复了语法错误,一切都好了。


1

简述:在Visual Studio报表设计器中
1.以设计模式打开报表并从RDLC文件中删除数据集
2.打开“解决方案浏览器”并删除实际(损坏的)XSD文件
3.将数据集添加回RDLC文件中。
4.上述过程将创建新的XSD文件。
5.更详细的说明如下。

在Visual Studio中,以设计模式打开您的RDLC文件报表。单击报表,然后从顶部菜单中选择“查看”然后选择“报表数据”。选择“数据集”,然后右键单击并从报表中删除数据集。接下来,如果您的Visual Studio尚未打开“解决方案浏览器”,请打开它。找到XSD文件(它应该与您刚刚从报表中删除的数据集名称相同)。现在返回并再次右键单击报表数据“数据集”,选择“添加数据集”。这将创建一个新的XSD文件并将数据集属性写入报表中。现在您的错误消息将消失,并且任何缺少的数据现在都将出现在您的报表中。


0
我在 VS 2012 中遇到了这个问题,在项目中“部分名称”已经被更改,我通过删除项目中的“app.config”,右键单击“解决方案资源管理器”中的项目,选择“属性”,然后选择“设置”,接着对其中一个设置进行更改,保存并重新构建来解决它。这将创建一个带有正确信息的新 app.config。

0

当这种情况(突然出现)发生在我身上时,我正准备深入研究上面的最佳答案,但后来我想关闭项目、关闭Visual Studio,然后重新打开一切。问题解决了。是VS的bug吗?


1
过度了。在VS中关闭App.config文件编辑器就足够了。可能是VS的bug。 - Jirka Hanika

0
在我的情况下,我的代码中存在一个模糊的引用。我重新启动了Visual Studio,并能够看到错误消息。当我解决了这个问题后,另一个错误也消失了。

-1

我写的大部分内容已经被Pressacco涵盖了,但这是关于SpecFlow的特定内容。

我在<specFlow>元素中遇到了这个消息,因此我向解决方案添加了一个specflow.xsd文件this answer(对<plugins>元素进行了一些修改)。

然后,我(像Pressacco一样),在app.config文件缓冲区内右键单击并选择属性,在Schemas中添加了"specflow.xsd"。现在Schemas的全部内容如下:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\xml\Schemas\1033\DotNetConfig.xsd" "C:\Program Files (x86)\Microsoft Visual Studio 12.0\xml\Schemas\EntityFrameworkConfig_6_1_0.xsd" "C:\Program Files (x86)\Microsoft Visual Studio 12.0\xml\Schemas\RazorCustomSchema.xsd" "specflow.xsd"

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