DataContracts from XSD first!
Es la forma moderna y muy buena práctica, sin embargo, VS2010 tiene soporte de automatización muy limitado por ello. Por lo tanto, me senté y escribí un objetivo de msbuild puro que: no requiere modificaciones de archivo de proyecto y genera .g.cs. También puede lograr generar código VB muy fácilmente con pequeños ajustes en este archivo.
Instalación: Copie el código y guárdelo como archivo GenerateDataContractsFromXSD.targets en la carpeta 'C: \ Archivos de programa \ MSBuild \ 4.0 \ Microsoft.Common.targets \ ImportAfter'. Esto hace que msbuild lo lea cada vez que se inicia y lo mismo aplica para VS2010.
Uso:
- VS2010 reinicio y añadir un XSD en su proyecto.
- Seleccione el archivo XSD y presione F4 para mostrar la ventana de herramientas de propiedades.
- Cambie la propiedad Acción de compilación para contener el valor. GenerateDataContracts
- Cree el proyecto con el archivo XSD. Genera el primer archivo .g.cs.
- Controle la vista en el Explorador de soluciones para mostrar todos los archivos en el sistema de archivos.
- Incluya el nuevo archivo generado en el proyecto.
- Agregue referencia al ensamblado System.Runtime.Serialization.
Enjoy.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Inject into the sequence of targets in order to add a generated file to compile -->
<PropertyGroup>
<CoreCompileDependsOn>
GenerateDataContractsFromXSD;
$(CoreCompileDependsOn);
</CoreCompileDependsOn>
</PropertyGroup>
<ItemGroup>
<SvcUtilParam Include="/nologo" />
<SvcUtilParam Include="/target:code" />
<SvcUtilParam Include="/dataContractOnly" />
<SvcUtilParam Include="/serializer:DataContractSerializer" />
<SvcUtilParam Include="/language:csharp" />
<SvcUtilParam Include="/enableDataBinding" />
<SvcUtilParam Include="/serializable" />
<SvcUtilParam Include="/internal" />
</ItemGroup>
<ItemGroup>
<AvailableItemName Include="GenerateDataContracts">
<Targets>GenerateDataContractsFromXSD</Targets>
</AvailableItemName>
</ItemGroup>
<ItemDefinitionGroup>
<GenerateDataContracts>
<!-- Use the following options to pass serialization options to SVCUTIL -->
<DataContractSchemaMapping>"/n:*,$(AssemblyName).Data"</DataContractSchemaMapping>
</GenerateDataContracts>
</ItemDefinitionGroup>
<!-- Automated Data Contract Serialisation using the SvcUtil.Exe tool -->
<!-- in order to make it automated you have to set the build tool in properties window to GenerateDataContracts -->
<Target Name="GenerateDataContractsFromXSD"
Inputs="@(GenerateDataContracts)"
Outputs="%(GenerateDataContracts.RootDir)\%(GenerateDataContracts.Directory)%(GenerateDataContracts.Filename).g.cs">
<ItemGroup>
<DataContractItems Include="@(GenerateDataContracts -> '%(FullPath)')" Condition="'%(Extension)' == '.xsd'" />
</ItemGroup>
<PropertyGroup>
<DataContractGeneratedFilePath>%(DataContractItems.RootDir)\%(DataContractItems.Directory)%(DataContractItems.Filename).g.cs</DataContractGeneratedFilePath>
<DataContractGeneratedIdentifier>@(GenerateDataContracts -> '%(RelativeDir)')%(DataContractItems.Filename).g.cs</DataContractGeneratedIdentifier>
</PropertyGroup>
<GetFrameworkSdkPath>
<Output TaskParameter="Path" PropertyName="WIN_SDK_PATH" />
</GetFrameworkSdkPath>
<Exec
Condition="'@(DataContractItems)' != ''"
Command="attrib -r "$(DataContractGeneratedFilePath)"" />
<Exec
Condition="'@(DataContractItems)' != ''"
Outputs="$(DataContractGeneratedFilePath)"
Command=""$(WIN_SDK_PATH)bin\SvcUtil.exe" @(SvcUtilParam, ' ') @(GenerateDataContracts -> '%(DataContractSchemaMapping)') "/out:$(DataContractGeneratedFilePath)" "%(DataContractItems.FullPath)"" />
</Target>
<Target Name="GetCopyGenerateDataContractItems"
AfterTargets="AssignTargetPaths">
<ItemGroup>
<DataContractItems Include="@(GenerateDataContracts -> '%(FullPath)')" Condition="'%(Extension)' == '.xsd'" />
</ItemGroup>
<AssignTargetPath Files="@(DataContractItems)" RootFolder="$(MSBuildProjectDirectory)">
<Output TaskParameter="AssignedFiles" ItemName="ContentWithTargetPath" />
</AssignTargetPath>
</Target>
</Project>
Ok ahora estoy recibiendo otro error. maxOcurrencias en DownloadRequestItem debe ser 1 Este es mi esquema \t elementFormDefault = "calificado"> \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t xs: secuencia> \t \t \t \t \t xs: complexType> \t \t \t \t \t \t \t xs: secuencia> \t \t xs: complexType> \t –
Daveo
¿Puedes actualizar tu pregunta original editando? Poner XML en los comentarios es REALMENTE REALMENTE difícil de leer y un desastre ..... –
wcfBlue http: //wscfblue.codeplex.com/ –