簡體   English   中英

使用xsd.exe通過SchemaImporterExtension生成C#類。 無需修改machine.config

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM