Как я могу предотвратить svcutil от изменения моей схемы?
Я строю struct
это IXmlSerializable
и мне нужно контролировать схему XML (XSD), которая создается для этого типа. Для этого я использую XmlSchemaProvider
атрибут на моей структуре.
[XmlSchemaProvider("ProvideSchema")]
public struct MyStruct : IXmlSerializable { ... }
Я предоставляю схему, основанную на следующем xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="https://schemas.company.org/public/2011/05" elementFormDefault="qualified" targetNamespace="https://schemas.company.org/public/2011/05" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="MyType">
<xs:restriction base="xs:string">
<xs:length value="8" />
<xs:pattern value="[0-9]{8}" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Когда я использую svcutil
создать схему xsd из результирующей библиотеки классов:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe" "$(TargetPath)" /dataContractOnly
в результате генерируется следующая схема:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="https://schemas.company.org/public/2011/05" elementFormDefault="qualified" targetNamespace="https://schemas.company.org/public/2011/05" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xs:simpleType name="MyType">
<xs:annotation>
<xs:appinfo>
<IsValueType xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsValueType>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:length value="8" />
<xs:pattern value="[0-9]{8}" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Обратите внимание, что xs:import
а также xs:annotation
элементы добавляются.
Когда я строю свой тип как ссылочный тип (то есть класс вместо структуры), эта аннотация не добавляется.
Почему svcutil
добавить эту аннотацию, и как я могу предотвратить это (не переключая структуру на тип класса)?