3

I have an XSD containing a simple type like this:

<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>

Now when I use this type:

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

LINQ to XSD generates

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

Notice the ::. after global. Now that dot is very wrong there, I assume I'm missing a namespace. Now if I delete the dot manually it's working quite alright, but I'd rather not delete the dozen or so occurrences on every generation. Do you have any ideas?

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

わかりました、これが本当の正解です! ( nuget Linq2Xsd パッケージを使用しています)

質問者の元のソリューションには大きな問題があります。つまり、独自の名前空間を外部 XSD に追加する場合、このバグを防ぐためだけに、XML を生成しようとすると、その外部サービスに作成された名前空間を送信することになります。認識しません。

  • 作成した名前空間と追加した可能性のある targetNamespace を削除することから始めます。
  • 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 に答える
2

これについて、過去数時間で学んだいくつかのこと:

  • @TDaver が言ったよう::.に、生成されたコードで回避するには名前空間が必要です。Custom Tool Namespaceプロパティでこれを何らかの形でオーバーライドできることを望んでいましたが、うまくいきませんでした。使用していたいくつかの Amazon XSD に作成した名前空間を追加し、XSD が変更された場合にこれを再度行う必要があるという事実を受け入れる必要がありました。

  • Linq2XSD プロジェクトの以前のバージョンにはこの問題はありませんでしたが、何かが変更されました。そのため、以前にダウンロードした DLL のみを使用していた nuget パッケージを使用して再コンパイルすると、以前にはなかったこの問題が発生する可能性があります。

  • 重要:プロジェクトのすべての XSD ファイルは、1 つのLinqToXsdSource.csファイルにコンパイルされます。エラーを探して間違った XSD ファイルを呼び出している可能性があるため、これを認識することは非常に重要です。

  • ファイルを含む obj\Debug フォルダーに注目することをお勧めしますLinqToXsdSource.cs。問題が発生した場合は、このフォルダーを消去するか、エラーを監視するために開いたままにしておくことをお勧めします。

于 2013-10-15T03:41:03.687 に答える