[英]Using xsd.exe to generate C# classes with SchemaImporterExtension. Without modifying machine.config
我有兩個不同的xsd文件與兩個不同的VS2010項目相關聯。
第一個名為BasicTypes.xsd
是首先使用xsd.exe
“構建”的,並且在我的NetToolbox.dll
程序NetToolbox.dll
構建了生成的類。
當建立第二個(名為Entity.xsd
),我需要重新使用已生成的類(提供NetToolbox.dll
),因為在類型Entity.xsd
中定義BasicTypes.xsd
。 這是在程序集EntityProvider.dll
。
而且,在運行時,我必須將這些對象從EntityProvider.dll
傳遞到NetToolbox.dll
因此必須具有相同的類定義(我認為,也許我錯了)。
這個問題與下面的鏈接非常相似,但是對我來說( Altering 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="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提供的第三方工具之外的其他任何第三方工具均不可行(安全性限制)
謝謝
您可以在xsd.exe
實用程序本身的配置文件中而不是在machine.config
文件中注冊架構導入程序擴展。
為此,請在項目目錄結構中的某個位置復制xsd.exe
應用程序的副本, xsd.exe.Config
在同一目錄中創建一個名為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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.