2011-08-18 5 views
2

저는 C# developpment에서 새로운 기능을 가지고 있으며 각 XSD 스키마에 대해 하나의 CS 파일을 가져 오는 절차를 알고 싶습니다.xml 스키마 (xsd)에 대한 cs 파일을 얻는 방법

3 개의 xsd 파일 (A.xsd, B.xsd 및 Common.xsd)이 있습니다. A와 B 모두 Common을 가져 오기로 사용합니다. 난 성공하지 않고 "xsd.exe"와 "xsd2code.exe"를 시도했다. 복잡한 유형에는 최상위 요소 "Common.xsd"로 발견되지 않았기 때문에

  • "xsd.exe"

    1. 클래스를 생성 할 수 없습니다.
    2. "A.cs"및 "B.cs"파일은 생성되지만 "Common.xsd"코드는 각 파일에 있습니다.
  • 은 "xsd2code.exe"

    1. "Common.cs은"글쎄, "MyNamespace.Common"선택이 끝난 한 네임 스페이스를 사용하여 생성됩니다.
    2. 지정되지 않은 유형으로 인해 다른 파일을 생성 할 수 없지만 사용자 지정 사용 ("/ cu"옵션)으로 "MyNamespace.Common"을 사용합니다.

사람은 아이디어가 있습니까?

미리 감사드립니다.

답변

3

가져 오기 또는 포함 체인에있는 스키마를 모두 참조해야합니다.

이 시도 :

xsd /c A.xsd B.xsd Common.xsd 

편집 : 그러나이 모든 클래스가 하나 개의 파일에 있음을 의미합니다.

  1. 수동으로 그들을 분할 : 당신이 그 (것)들을 다른 파일 속으로 분할하려는 경우

    은 두 가지 옵션이 있습니다. 나는 이것이 생성 된 파일이라는 것을 알고 있지만 당신의 소스 스키마가 상당히 정적이라면 그것은 하나의 운동이다.

  2. 대신 svcutil.exe를 사용하십시오. 그러나 이것은 훨씬 더 복잡하고 스키마가 모두 특정 지침을 준수하지 않는 한 실제로는 수행 할 수 없을 수도 있습니다. 관심이 있으시면 아래 프로세스를 참조하십시오.

경우 공상 옵션 2 위 여기에 일반 과정 :

  1. 이는 svcutil에서/dconly 플래그를 사용 Common.xsd에서 유형의 압축을 풉니 다. 그러면 일반적인 유형의 클래스 파일이 생성됩니다.
  2. 이 클래스를 어셈블리로 컴파일
  3. /r 플래그를 사용하고 CommonTypes.dll 어셈블리를 참조하여 A.xsd에서 형식을 추출합니다.
  4. B와 동일하게 수행하십시오.XSD

는 그러나이 방법은/R 플래그가 XmlSerializer를 사용할 수없는 같은 작업을 수행 할 DataContractSerializer를 사용하여는 svcutil에 근거한다. 그리고 이것은 스키마가 다소 엄격한 DCS 규칙 (여기에서 찾을 수 있습니다 : http://msdn.microsoft.com/en-us/library/ms733112.aspx)을 준수하는 경우에만 작동합니다.

이러한 규칙이 준수되지 않으면 svcutil은/r 플래그를 지원하지 않는 XmlSerializer를 사용합니다.

희망이 도움이됩니다.

+0

좋아, 작동하지만 모두 하나의 파일에 있습니다. 내 목표는 스키마 당 하나의 cs 파일을 갖는 것입니다. – Bref

+0

확장 된 답변을 참조하십시오. –

+0

나는 첫 번째 옵션에 대해 이미 생각해 봤습니다. 그러나 내 견해로 볼 때 자동 작업 후 수동 작업은 까다 롭습니다. 두 번째 옵션은 사실 훨씬 더 복잡하지만 잘 작동합니다. 당신의 프로세스는 저를 도우며 고맙습니다. – Bref

관련 문제