3

我有一个包含这样一个简单类型的 XSD:

<xs:simpleType name="csharpName" id="csharpName">
    <xs:restriction base="xs:string">
        <xs:pattern value="[A-Za-z][A-Za-z0-9_]*" />
    </xs:restriction>
</xs:simpleType>

现在当我使用这种类型时:

 <xs:element name="typeName" type="csharpName" />

LINQ to XSD 生成

this.SetElementWithValidation(XName.Get("typeName", ""), value, "typeName", global::.csharpName.TypeDefinition);`

注意::.after 全局。现在那个点在那里是非常错误的,我假设我缺少一个命名空间。现在,如果我手动删除该点,它工作得很好,但我宁愿不删除每一代的十几个事件。你有什么想法?

4

3 回答 3

3

我已经解决了,自定义类型需要这样的命名空间:

<xs:schema
    attributeFormDefault="unqualified"
    elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://codegen"
    xmlns:codegen="http://codegen">

然后使用带有 codegen 前缀的类型。

于 2011-02-04T12:18:00.697 回答
2

在过去的几个小时里我学到了几件事:

  • 正如@TDaver 所说,需要::.在生成的代码中避免命名空间。我希望能够以某种方式用该Custom Tool Namespace属性覆盖它,但这并没有奏效。我只需要向我正在使用的一些 Amazon XSD 添加一个组成的命名空间,并接受如果 XSD 发生更改我需要再次执行此操作的事实。

  • 早期版本的 Linq2XSD 项目没有此问题,但发生了一些变化 - 因此,如果您使用以前仅使用下载的 DLL 的 nuget 包重新编译,那么您可能会看到以前没有的问题。

  • 重要提示:项目的所有 XSD 文件都被编译为单个LinqToXsdSource.cs文件。意识到这一点非常重要,因为您可能正在寻找错误的 XSD 文件以查找错误。

  • 您可能需要留意包含文件的 obj\Debug 文件夹LinqToXsdSource.cs。如果遇到问题,您可能只想炸掉这个文件夹,或者只是保持打开状态以监控错误。

于 2013-10-15T03:41:03.687 回答
2

好的,这是真正的正确答案!(我正在使用nuget Linq2Xsd 包

提问者的原始解决方案有一个大问题,那就是如果您将自己的命名空间添加到外部 XSD 只是为了防止这个错误,当您尝试生成 XML 时,您将向该外部服务发送一个他们可以组成的命名空间不认识。

  • 首先删除您可能添加的任何组成的命名空间和目标命名空间。
  • 然后只需将文件添加LINQ-TO-XSD-CONFIG.xsd到您的项目中。它可以在您想要的任何地方。
  • 将构建操作设置为LinqToXsdConfiguration
  • 注意:只要文件具有此构建操作,您就可以随意调用该文件。

在此处输入图像描述

该文件的内容应该是所有命名空间和到 Clr 类型的映射的列表。请记住,DLL 中的每个模式都是通过同一个\obj\Debug\LinqToXsdSource.cs文件编译的,因此您需要为项目中使用的每个 XSD 添加每个命名空间。

这里的关键是您放置默认值的空命名空间。这样可以避免::.问题

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="http://www.microsoft.com/xml/schema/linq">
  <Namespaces>
    <Namespace Schema="http://example.com/idr" Clr="example.com.idr"/>
    <Namespace Schema="" Clr="LinqXsdGenericNamespace"/>
  </Namespaces>
</Configuration>

另见: http: //linqtoxsd.codeplex.com/discussions/238570

于 2013-10-16T20:08:09.500 回答