blob: a1374df34959d9d39b615ddfdb08e61329874bb3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
namespace WixToolset.Tools
{
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using Microsoft.CSharp;
using WixToolset;
/// <summary>
/// Generates a strongly-typed C# class from an XML schema (XSD).
/// </summary>
public class XsdGen
{
private string xsdFile;
private string outFile;
private string outputNamespace;
private string commonNamespace;
private bool showHelp;
/// <summary>
/// Constructor for the XsdGen class.
/// </summary>
/// <param name="args">Command-line arguments passed to the program.</param>
private XsdGen(string[] args)
{
this.ParseCommandlineArgs(args);
// show usage information
if (this.showHelp)
{
Console.WriteLine("usage: XsdGen.exe <schema>.xsd <outputFile> <namespace> [<commonNamespace>]");
return;
}
// ensure that the schema file exists
if (!File.Exists(this.xsdFile))
{
throw new ApplicationException(String.Format("Schema file does not exist: '{0}'.", this.xsdFile));
}
XmlSchema document = null;
using (StreamReader xsdFileReader = new StreamReader(this.xsdFile))
{
document = XmlSchema.Read(xsdFileReader, new ValidationEventHandler(this.ValidationHandler));
}
CodeCompileUnit codeCompileUnit = StronglyTypedClasses.Generate(document, this.outputNamespace, this.commonNamespace);
using (CSharpCodeProvider codeProvider = new CSharpCodeProvider())
{
ICodeGenerator generator = codeProvider.CreateGenerator();
CodeGeneratorOptions options = new CodeGeneratorOptions();
options.BlankLinesBetweenMembers = true;
options.BracingStyle = "C";
options.IndentString = " ";
using (StreamWriter csharpFileWriter = new StreamWriter(this.outFile))
{
generator.GenerateCodeFromCompileUnit(codeCompileUnit, csharpFileWriter, options);
}
}
}
/// <summary>
/// The main entry point for the application.
/// </summary>
/// <param name="args">The command line arguments.</param>
/// <returns>The error code.</returns>
[STAThread]
public static int Main(string[] args)
{
try
{
XsdGen xsdGen = new XsdGen(args);
}
catch (Exception e)
{
Console.WriteLine("XsdGen.exe : fatal error MSF0000: {0}\r\n\r\nStack Trace:\r\n{1}", e.Message, e.StackTrace);
return 1;
}
return 0;
}
/// <summary>
/// Validation event handler.
/// </summary>
/// <param name="sender">Sender for the event.</param>
/// <param name="e">Event args.</param>
public void ValidationHandler(object sender, ValidationEventArgs e)
{
}
/// <summary>
/// Parse the command line arguments.
/// </summary>
/// <param name="args">Command-line arguments.</param>
private void ParseCommandlineArgs(string[] args)
{
if (3 > args.Length)
{
this.showHelp = true;
}
else
{
this.xsdFile = args[0];
this.outFile = args[1];
this.outputNamespace = args[2];
if (args.Length >= 4)
{
this.commonNamespace = args[3];
}
}
}
}
}
|