我有两个不同的xsd文件与两个不同的VS2010项目相关联。
第一个名为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提供的任何其他第三方工具不是一个选项(安全限制)
谢谢
答案 0 :(得分:0)
您可以在xsd.exe
实用程序本身的配置文件中注册架构导入程序扩展,而不是在machine.config
文件中。
要执行此操作,请在项目的目录结构中的某处创建xsd.exe
应用程序的副本,并在同一目录中创建名为xsd.exe.Config
的文件。添加行以在configuration
根元素内注册模式导入器扩展。
对于您的示例,xsd.exe.Config
文件如下所示。请注意,name
元素中需要add
属性,我使用了扩展类的名称。
<?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>