Using XSD with Microsoft Visual Studio

From Code Synthesis Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 08:40, 8 September 2008
James (Talk | contribs)
(Visual Studio 2005 (8.0) and 2008 (9.0))
← Previous diff
Revision as of 08:41, 8 September 2008
James (Talk | contribs)
(Conflicting xsd.exe in your path)
Next diff →
Line 31: Line 31:
=== Conflicting xsd.exe in your path === === Conflicting xsd.exe in your path ===
-The Microsoft SDK may also contain an executable with the name xsd.exe, which takes precedence over the one we want to use here. If this is the case, you'll get an error message in the output windows like:+The Microsoft SDK may also contain an executable with the name xsd.exe, which takes precedence over the one we want to use here. If this is the case, you'll get an error message in the output window like:
:xsd ".\some_schema.xsd" :xsd ".\some_schema.xsd"
:Microsoft (R) Xml Schemas/DataTypes support utility :Microsoft (R) Xml Schemas/DataTypes support utility

Revision as of 08:41, 8 September 2008

This page discusses various ways of integrating the XSD compiler with the Microsoft Visual Studio IDE as well as other Visual Studio-specific topics.

Contents


Visual Studio .NET 2003 (7.1)

A common way of integrating the XSD compilation step into Visual Studio (VS) 7.1 is with the custom build steps. With this method you add the schema file to your project and specify the command line to compile it as well as the output files. When the project is built, VS IDE checks if the output files do not exist or out-of-date compared to the schema file and executes the specified command line in order to regenerate them. The following step-by-step instructions describe how to accomplish this:

  1. Add the schema file (for example, hello.xsd) to your project ("Project"->"Add Existing Item" menu action). At this point VS assumes that you are going to use the Microsoft xsd.exe tool and will try to compile the schema which may fail. This is ok. You may also find that additional files (for example, hello.h) were added under the schema item. You can safely remove them from the project.
  2. Open the Properties dialog for the schema file (select the schema file in the Solution Explorer and choose "Project"->"Properties" menu action).
  3. In the Properties dialog select the General tab and choose "Custom Build Tool" for the Tool field. Then press the Apply button.
  4. In the same Properties dialog select the "Custom Build Step" tab. There you will have the "Command Line", "Description", "Outputs", and "Additional Dependencies" fields. Fill them depending on how you want to compile your schema, for example:
    Visual Studio 7.1 Custom Build Step dialog screenshot
  5. Press the Ok button to close the Properties dialog.
  6. Compile the schema by select the schema file in the Solution Explorer and choosing "Build"->"Compile" menu action. This will result in the output files (for example, hello.hxx and hello.cxx) being created.
  7. Add the output files (for example, hello.hxx and hello.cxx) to the project ("Project"->"Add Existing Item" menu action).
  8. If your project is not linking to Xerces-C++ (or Expat, if you are using the C++/Parser mapping and have selected Expat as the underlying XML parser), you should add xerces-c_2.lib (release) or xerces-c_2D.lib (debug) (libexpat.lib for Expat) as Additional Dependencies in the Linker's Input tab. To accomplish this, select your project in Solution Explorer and choose "Project"->"Properties" menu action. Select the Linker tab, then Input sub-tab, and enter the library name into the Additional Dependencies field.

Visual Studio 2005 (8.0) and 2008 (9.0)

For Visual Studio 2005 and 2008 there are two ways to setup the XSD compilation step. You can use the same custom build step approach as in Visual Studio 2003. Additionally, starting from Visual Studio 2005, you can use the rules-based approach of setting up the XSD compilation. This method relies on the .rules files that are provided with the XSD distributions. These files specify the command line, output files, and options for the XSD compiler. They also provide the GUI-based presentation which allows you to configure the schema compilation process in a way similar to the built-in tools such as the C++ compiler and linker. The following step-by-step instructions show how to accomplish this:

  1. The .rules files are located in the etc\vc-8.0 and etc\vc-9.0 directories (for VS 2005 and 2008, respectively) in the XSD distribution. The first step is to add one of these directories to the list of paths where Visual Studio looks for .rules files. To accomplish this, open the Options dialog by choosing the "Tools"->"Options" menu action. Then in the "Projects and Solutions" tab select the "VC++ Project Settings" sub-tab. Add the path to either etc\vc-8.0 (for VS 2005) or etc\vc-9.0 (for VS 2008) to the "Rule File Search Paths" field. Then press the Ok button to close this dialog.
  2. Select the project where you want to add your schema and open the "Custom Build Rules" dialog by choosing "Project"->"Custom Build Rules" menu action. There your should see two rules for CodeSynthesis XSD: one is for C++/Tree and the other is for C++/Parser. Select the rule corresponding to the mapping you are planning to use in your project. Press the Ok button to close the dialog. For example:
    Visual Studio 8.0 Custom Build Rules dialog screenshot
  3. Add the schema file (for example, hello.xsd) to your project ("Project"->"Add Existing Item" menu action). At this point VS may add additional files (for example, hello.h) under the schema item. You can safely remove them from the project.
  4. Open the Properties dialog for the schema file (select the schema file in the Solution Explorer and choose "Project"->"Properties" menu action). There you will notice that the Tool field in the General tab contains the name of the C++ mapping that you have chosen.
  5. In the same Properties dialog select the "C++/Tree Mapping Rule" or "C++/Parser Mapping Rule" tab. There you will see a number of sub-tabs where you can select various XSD compiler options, for example:
    Visual Studio 8.0 C++/Tree mapping rule screenshot
  6. Press the Ok button to close the Properties dialog.
  7. Compile the schema by select the schema file in the Solution Explorer and choosing "Build"->"Compile" menu action. This will result in the output files (for example, hello.hxx and hello.cxx) being created.
  8. Add the output files (for example, hello.hxx and hello.cxx) to the project ("Project"->"Add Existing Item" menu action).
  9. If your project is not linking to Xerces-C++ (or Expat, if you are using the C++/Parser mapping and have selected Expat as the underlying XML parser), you should add xerces-c_2.lib (release) or xerces-c_2D.lib (debug) (libexpat.lib for Expat) as Additional Dependencies in the Linker's Input tab. To accomplish this, select your project in Solution Explorer and choose "Project"->"Properties" menu action. Select the Linker tab, then Input sub-tab, and enter the library name into the Additional Dependencies field.

Conflicting xsd.exe in your path

The Microsoft SDK may also contain an executable with the name xsd.exe, which takes precedence over the one we want to use here. If this is the case, you'll get an error message in the output window like:

xsd ".\some_schema.xsd"
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.
Error: invalid command line argument: 'cxx-tree'.
If you would like more help, please type "xsd /?".
Project : error PRJ0019: A tool returned an error code from "xsd ".\some_schema.xsd""

If this is the case, change your .rules files so that it contains the absolute path to the xsd.exe executable as i.e.:

CommandLine=""C:\Program Files\CodeSynthesis XSD 3.1\bin\xsd.exe" cxx-tree --output-dir [AllOptions] [AdditionalOptions] [Inputs]"

Make sure that the path is surrounded by quotes (") if it contains spaces!

Creating a DLL

This section explains how to create a dynamically-linked library (DLL) from the generated code. It assumes that you are using the .rules file approach as presented in the previous section. You can also achieve the same result by using the custom build step method.

1. Create a DLL project, let's call it foo, and add the schema to it as explained in the previous section.

2. Create a header file, let's call it export.hxx, which contains the export symbol definitions:

#ifdef FOO_EXPORTS
#define FOO_SYMBOL_DECL __declspec(dllexport)
#else
#define FOO_SYMBOL_DECL __declspec(dllimport)
#endif

3. Open the Properties dialog for the schema file, select the Code Generation tab and enter FOO_SYMBOL_DECL into the Export Symbol field. Then select the Command Line tab and add --hxx-prologue "#include \"export.hxx\"" to the Additional Options field. Press the Ok button to close this dialog.

4. Rebuild the project.

Personal tools