使用xsd.exe生成带有SchemaImporterExtension的C#类.不修改machine.config



我有两个不同的xsd文件与两个不同VS2010项目关联。

第一个名为BasicTypes.xsd的类首先使用xsd.exe"构建",生成的类在我的NetToolbox.dll程序集中构建。

当构建第二个(名为Entity.xsd)时,我需要重用已经生成的类(在NetToolbox.dll中可用),因为Entity.xsd中的类型是在BasicTypes.xsd中定义的。这在程序集EntityProvider.dll中。

此外,在运行时,我必须将这些对象从EntityProvider.dll传递到NetToolbox.dll,因此必须具有相同的类定义(我认为,也许我错了)。

这个问题与下面的链接非常相似,但我不可能得到建议的答案(修改machine.config):使用xsd.exe生成C#类,如何指定现有类型?

我尝试了所提出的解决方案(通过修改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="directoryBasicTypes.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提供的工具之外的任何其他第三方工具都不是一种选择(安全限制)

谢谢

您可以在xsd.exe实用程序本身的配置文件中注册模式导入器扩展名,而不是在machine.config文件中。

为此,请在项目的目录结构中的某个位置复制xsd.exe应用程序,并在同一目录中创建一个名为xsd.exe.Config的文件。添加行以在configuration根元素内注册模式导入器扩展。

对于您的示例,xsd.exe.Config文件如下所示。注意,add元素中需要一个name属性,我使用了扩展类的名称。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.xml.serialization>
<schemaImporterExtensions> 
<add name="ADODBSchemaImporterExtension" type="SchemaImport.ADODBSchemaImporterExtension, SchemaImport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd583032ee337c41" /> 
</schemaImporterExtensions>
</system.xml.serialization>
</configuration>

最新更新