Avoid regenerating the same types over and over
I have a full set of XSD's, some which declare common types that are used in others. I don't know how I can run this tool (CLI or Nuget) to only generate the common types once. Our xsd's include:
- Common types
- Orders
- Invoices
- OrderConfirmations
Etc. it's a whole tree of different standards for these doc types.
An option to "do not include external xsd's" would help me, as I can then just add the correct "using" statements post creation. Is this possible to achieve? Concrete example:
- I extract the common types xsd into namespace
MyBusiness.Standards.Standard1.v1_1.Common - When I extract "Orders" xsd, it goes into namespace
MyBusiness.Standards.Standard1.v1_1.Ordersbut with an instruction to include a using statement for the first namespace.
Today, it reads and includes referenced xsd files and generates all the common types for every type that I have. A command line example could be:
> xsd2cs -n "Orders" --add-using "Common" --do-not-include -o Test .\Orders.xsd
Doable?
I'm not sure I understand the issue. For each distinct XML Schema type there should be only one corresponding C# class that is being generated. Where does the duplication occur in your use case?
I may be attempting to convert too much at once:
var xsdFiles = XsdFileFinder.FindXsdFilesWithNamespaces(rootFolder);
Console.WriteLine(new string('-', 120));
var namespaceMappings = new Dictionary<NamespaceKey, string>();
foreach (var xsdFile in xsdFiles)
{
var key = new NamespaceKey(xsdFile.XsdNamespace);
if (!namespaceMappings.ContainsKey(key))
{
namespaceMappings.Add(key, xsdFile.CSharpNamespace);
}
}
var NsProvider = namespaceMappings
.ToNamespaceProvider(new GeneratorConfiguration { NamespacePrefix = string.Empty }
.NamespaceProvider.GenerateNamespace);
When I attempt to give the entire list to the generator, it fails profusely. with variants of The element has already been declarederrors.
If I run it in a foreach loop, all is good, but common types are repeated across the board.
Try passing only the XSD file to the generator that contains the root element resp. the elements that you are interested in de/serializing.