У меня есть два разных файла xsd, связанных с двумя разными проектами VS2010.Использование xsd.exe для генерации классов C# с помощью SchemaImporterExtension. Без изменения machine.config
Первый, названный BasicTypes.xsd
«сначала построен», используя xsd.exe
, и сгенерированные классы встроены в мою сборку NetToolbox.dll
.
При создании второй (с именем Entity.xsd
), мне нужно повторно использовать уже сгенерированный класс (Доступно в NetToolbox.dll
), потому что типы в Entity.xsd
определены в BasicTypes.xsd
. Это находится в сборке EntityProvider.dll
.
Кроме того, во время выполнения я должен передать эти объекты от EntityProvider.dll
до NetToolbox.dll
, поэтому определение того же класса является обязательным (я думаю, может быть, я ошибаюсь здесь).
Этот вопрос очень похож на следующую ссылку, но предложенный ответ не представляется возможным для меня (Изменяя machine.config
): Using xsd.exe to generate C# classes, how to specify an existing type?
Я попробовал предложенное решение (Изменяя machine.config
) без успеха у меня действительно было трудное время правильно указывая сборку в файле machine.config и xsd.exe parameter.xml.
<system.xml.serialization>
<schemaImporterExtensions>
<add type="SchemaImport.ADODBSchemaImporterExtension, SchemaImport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd583032ee337c41" />
</schemaImporterExtensions>
</system.xml.serialization>
Например, вот два XSD. BasicTypes.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.tempuri.com/BasicTypes"
xmlns="http://www.tempuri.com/BasicTypes"
elementFormDefault="qualified">
<xs:complexType name="PositionType">
<xs:sequence>
<xs:element name="latitude" type="xs:double" />
<xs:element name="longitude" type="xs:double" />
<xs:element name="altitude" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:schema>
и Entity.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.tempuri.com/Entity"
xmlns="http://www.tempuri.com/Entity"
elementFormDefault="qualified"
xmlns:bt="http://www.tempuri.com/BasicTypes">
<xs:import namespace="http://www.tempuri.com/BasicTypes" schemaLocation="directory\BasicTypes.xsd" />
<xs:element name="entity" type="EntityType" />
<xs:complexType name="EntityType">
<xs:complexContent>
<xs:extension base="bt:PositionType">
<xs:attribute name="id" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
Использование любого другого инструмента третьей стороной, чем выданные рамками .NET (я в 4.0) или VS2010 не вариант (ограничения безопасности)
Спасибо
Это, вероятно, означает, что я должен зарегистрировать свою сгенерированную сборку в GAC? (Базовый XSD является частью пользовательской сборки .NET). Или есть способ принудительного конструирования? –