0

我有多个项目,每个项目都有不同的配置,所有这些配置都必须在一个 XML 文件中指定。那不是 app.config,而是在通用位置上指定的。

我目前的项目结构:

  • 核心项目(带有一些 XML)
  • 子项目(需要以通用方式访问核心 XML 配置 + 来自同一 XML 文件的自己的配置)

哪种 .NET XML 技术最适合这种情况?

提前致谢

4

3 回答 3

1

我没有在您的帖子中读到任何建议,即 .Net 框架的内置 Xml 功能无法胜任这项任务。

我几乎每天都使用 Xml,到目前为止,我从来不需要任何外部库。当然,这完全取决于您的项目要求,但是您有两个项目将使用相同的功能,因此您可以(并且应该)轻松地对两个项目的 Xml 处理进行抽象和隔离,或者引用您自己的核心\子项目中的 xml 类或(我的偏好)在单独的 dll 项目中。一个 dll 可以在未来很好地为您服务。

编写自己的 Xml 功能的另一个好处是,您可以收集更多关于 .Net Xml 命名空间的内部工作原理的知识,这些知识绝不会被浪费,而您可以通过使用外部库(即通常只是 .Net 类的包装器和外观)

希望这对编码有所帮助和快乐。

于 2013-04-11T12:37:32.743 回答
1

app.config 文件可能最适合这种情况。您可以创建自己的配置部分,并且所有引用的程序集都可以访问项目的单个配置文件,因此每个程序集都可以有自己的部分。您还可以在 user.config 中进行用户特定的配置(请参阅应用程序设置架构)。

如果你不能使用 app.config 因为它需要在一个特定的位置,你总是可以从不同的位置加载一个 app.config 文件ConfigurationManager.OpenMappedExeConfiguration

其他选择:

  • 使用XmlSerializer您的配置将 XML 反序列化为 POCO。
  • 自虐选项:使用普通XDocument或动态XmlDocument手动解析您的配置文件。
于 2013-04-11T12:49:33.883 回答
0

当前问题的解决方案:

使用 LINQ to XML,我采用了与对象匹配的 XML 元素。此 XML 元素比根更深一层。通过这种方式,我首先“过滤”根标签,然后将其转换为字符串,然后转换为具有反序列化的对象。

例如

<root>
    <project1>
       <somevalue>myvalue</somevalue>
    </project1>
    <project2/>
</root>

如果我想要 project1 中的所有内容,我将使用 LINQ to XML 获取带有后代的字符串,然后将字符串反序列化为相应的对象。

于 2013-04-11T20:18:33.737 回答