如何通过创建架构修复错误:“找不到属性/元素的架构信息”
Posted
技术标签:
【中文标题】如何通过创建架构修复错误:“找不到属性/元素的架构信息”【英文标题】:How to fix Error: "Could not find schema information for the attribute/element" by creating schema 【发布时间】:2011-07-15 06:42:15 【问题描述】:我有一个用 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.Settings1
和 CCP_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>
【问题讨论】:
这看起来像是对这个问题的欺骗:***.com/questions/179927/…。检查@user57433 的答案。 @rsbarro,EntLib配置工具和DotNetConfig.xsd文件在哪里? 对不起,我没有意识到用户发布了两个问题的答案。我正在参考第二个答案。该答案虽然正确,但有点不清楚,因此在下面提供了更详细的答案。 谢谢,rsbarro! StingyJack 最初的问题仅限于使用企业库配置部分的错误,而不仅仅是任何自定义配置部分。 【参考方案1】:最快、最简单最懒的解决问题的方法:
-
右键单击解决方案资源管理器中的项目图标并选择“属性”。
转到“应用程序”选项卡并选择较早的 .NET 目标框架。
保存更改。
转到“应用程序”选项卡并选择初始的 .NET 目标框架。
保存更改 => 问题已解决!
【讨论】:
这在第一次尝试时可能不起作用。我需要做两次才能在 VS 2013 Express 中工作。 可悲的是,VS2013 Ultimate 没有任何乐趣。 在 Visual Studio 2015 中为我工作。如果有人能解释原因会很好。 在 VS 2013 Professional 中对我不起作用。这种解决方法可能是最懒惰的,但它既不快速也不简单,仅仅因为它没有效果。 没用,VS2015 更新 2,.NET 4.5.2。看起来它使消息消失了,但是如果您再次打开 XML 文件,它们就会回来。【参考方案2】:2015 年 9 月更新 这个答案继续得到支持,所以我将把它留在这里,因为它似乎对某些人有帮助,但请先查看@reexmonkey 和@Pressacco 的其他答案。它们可能会提供更好的结果。
原始答案 试一试:
-
在 Visual Studio 中,打开 app.config 或 web.config 文件。
转到“XML”菜单并选择“创建架构”。此操作应创建一个名为“app.xsd”或“web.xsd”的新文件。
将该文件保存到您的磁盘。
返回到您的 app.config 或 web.config 并在 编辑窗口 中,右键单击并选择属性。从那里,确保您刚刚生成的 xsd 在 Schemas 属性中被引用。如果它不存在然后添加它。
这应该会导致这些消息消失。
我将 web.xsd 保存在我的 web 文件夹的根目录中(这可能不是它的最佳位置,但仅用于演示目的),我的 Schemas 属性如下所示:
"C:\Program Files (x86)\Microsoft 视觉工作室 10.0\xml\Schemas\DotNetConfig.xsd" "Web.xsd"
【讨论】:
@rsbarro,感谢您的回复!为什么你有 2 个 xsd 文件?我创建了模式,并提出了 1 个文件 - app.xsd,我将其保存到根目录。错误消失了,但现在我收到警告:“全局元素'配置'已经被声明”。关于如何解决这个问题的任何想法? 只需使用“属性”对话框选择您的架构或添加另一个架构。查看 app.config 时,右键单击编辑器窗口并选择属性。您应该在弹出的 Property Editor 控件中看到 Schemas。此外,如果您单击 Schemas 中的“...”按钮,它可以让您使用漂亮的 GUI 选择要用于配置文件的模式。 谢谢。这行得通,但是有没有一个好地方我可以阅读以了解为什么会发生这种情况?在为 DotNetOpenAuth 添加大量内容然后从头开始重新生成 edmx 文件之后,似乎我突然需要为我的 web.config 生成一个模式。 “你改变了很多事情,所以有些事情被搞砸了”,这是有道理的。某种方式,但了解为什么 web.config 文件会自发需要架构会很有帮助。 当您生成 Web.xsd 文件时,仅包含您在 web/app.config 部分(用户部分)中添加的架构。排除所有其他已经在默认架构中或其他 .xsd 包含的内容。 不不不!!这不是“解决方案”,因为它甚至不是真正的问题。查看并投票支持@pressacco 的答案。 reexmonkey 的回答也有效。为什么这个答案会得到如此多的赞成票? 1. 直接忽略!关闭 app.config 或 web.config 并编译你甚至不会看到消息。 2.虽然不需要,但通过右键单击 .config 属性更正 VS 提供的 XSD 的路径来解决。 (@pressacco 的回答) 3. 或者:更改项目设置 DotNet 版本并返回。重复两次。 (reexmonkey 的回答)。可能会导致软件包更新出现问题。【参考方案3】:EntLib 5 中包含一个 XSD,它安装在 Visual Studio 架构目录中。就我而言,它可以在以下位置找到:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas\EnterpriseLibrary.Configuration.xsd
上下文
Visual Studio 2010 企业库 5删除警告的步骤
-
在您的 Visual Studio 项目中打开 app.config
在 XML 文档编辑器中单击鼠标右键,选择“属性”
将完全限定路径添加到“EnterpriseLibrary.Configuration.xsd”
一边
值得重申的是,这些“错误列表”“消息”(“找不到元素的架构信息”)仅在您打开 app.config 文件时可见。如果您“关闭所有文档”并编译...不会报告任何消息。
【讨论】:
对不起,我可能遗漏了一些东西,“将路径添加到“EnterpriseLibrary.Configuration.xsd”的完全限定路径”是什么意思 完全限定路径我的意思是:使用绝对路径。例如C:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas\EnterpriseLibrary.Configuration.xsd
。在 Windows 操作系统上,相对路径可以包含 .\ 和 ..\ 字符。
相关帖子可以在:link
Visual Studio 2015 中是否缺少 EnterpriseLibrary.Configuration.xsd?
谢谢@Taegost,这也为我做了。 (我的问题,VS2013下的代码分析自定义字典,与所述略有不同,但症状相同)。我尝试过的其他任何方法都没有奏效,这让我发疯了。当我在编辑器中打开字典时,由于这些错误,代码分析工具似乎甚至没有使用它!【参考方案4】:
我发现相关模块中存在语法错误并且它没有被编译——不过编译器并没有告诉我。只是给了我有关 app.config 内容的错误。 VS2010。一旦我修复了语法错误,一切都很好。
【讨论】:
【参考方案5】:当您的项目引用过时的架构时会发生此错误。使用 Visual Studio 生成新的。
在 Visual Studio 中,执行以下操作:
-
打开您的
app.config
或web.config
文件。
转到XML
菜单并选择Create Schema
。
这将触发
app#.xsd
(Windows 应用)或web#.xsd
(网站)文件的生成。
-
将新生成的 xsd 文件保存到项目的根目录。
打开
App.config
或web.config
文件,右键单击文本编辑器并选择属性,然后单击模式值旁边的...
按钮。
使用Add
按钮添加新生成的xsd 文件。
点击OK
找不到属性/元素的架构信息错误现在应该得到解决。
【讨论】:
【参考方案6】:简单:在 Visual Studio 报表设计器中 1. 在设计模式下打开报表并从 RDLC 文件中删除数据集 2. 打开解决方案资源管理器并删除实际(损坏的)XSD 文件 3. 将数据集添加回 RDLC 文件。 4. 上述过程将创建新的 XSD 文件。 5. 更详细的如下。
在 Visual Studio 中,在设计模式下打开您的 RDLC 文件报告。单击报告,然后从顶部菜单中选择查看,然后选择报告数据。选择数据集,然后右键单击并从报告中删除数据集。下一步打开解决方案资源管理器,如果它尚未在您的 Visual Studio 中打开。找到 XSD 文件(它应该与您刚刚从报告中删除的数据集同名)。现在返回并再次右键单击报告数据 Datasets,然后选择 Add Dataset 。这将创建一个新的 XSD 文件并将数据集属性写入报告。现在您的错误消息将消失,所有丢失的数据现在都将显示在您的报告中。
【讨论】:
【参考方案7】:当这件事发生在我身上时(不知从何而来),我正要深入了解上面的最佳答案,然后我想我会关闭项目,关闭 Visual Studio,然后重新打开所有内容。问题解决了。 VS 错误?
【讨论】:
矫枉过正。在 VS 中关闭 App.config 文件编辑器就足够了。 VS 错误,也许吧。【参考方案8】:我在 VS 2012 中有这个,其中“部分名称”已在项目中更改,我通过删除项目中的“app.config”来修复它,然后在“解决方案资源管理器”中右键单击该项目,选择“属性”,然后选择“设置”,然后更改其中一项设置,保存并重新构建。这创建了一个包含正确信息的新 app.config。
【讨论】:
【参考方案9】:就我而言,我的代码中有一个模棱两可的引用。我重新启动了 Visual Studio 并能够看到错误消息。当我解决这个问题时,另一个错误消失了。
【讨论】:
【参考方案10】:Pressacco 已经涵盖了我写的大部分内容,但这是特定于 SpecFlow 的。
我收到了<specFlow>
元素的这条消息,因此我在解决方案this answer 中添加了一个specflow.xsd
文件(进行了一些修改以允许<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"
【讨论】:
以上是关于如何通过创建架构修复错误:“找不到属性/元素的架构信息”的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“value null Copy-Item Powershell”错误