我有两个不同的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>