DataContracts từ XSD trước!
Đó là cách thức hiện đại và thực hành rất tốt, tuy nhiên, VS2010 có hỗ trợ tự động hóa rất hạn chế cho nó. Do đó, tôi ngồi xuống và viết một mục tiêu msbuild tinh khiết mà: không yêu cầu sửa đổi tập tin proj và tạo ra .g.cs. Bạn cũng có thể đạt được tạo mã VB rất dễ dàng với các chỉnh nhỏ trong tệp này.
Instalaltion: Sao chép mã và lưu nó dưới dạng tệp GenerateDataContractsFromXSD.targets vào thư mục 'C: \ Program Files \ MSBuild \ 4.0 \ Microsoft.Common.targets \ ImportAfter'. Điều này làm cho msbuild đọc nó mỗi khi nó bắt đầu và áp dụng cho VS2010.
Cách sử dụng:
- khởi động lại VS2010 và thêm một xsd vào dự án của bạn.
- Chọn tệp XSD và nhấn F4 để hiển thị cửa sổ công cụ thuộc tính.
- Thay đổi thuộc tính Build Action để chứa giá trị GenerateDataContracts
- Tạo dự án với tệp XSD. Nó tạo tệp .g.cs đầu tiên.
- Chuyển đổi chế độ xem trong Solution Explorer để hiển thị tất cả các tệp trên hệ thống tệp.
- Bao gồm tệp mới được tạo trong dự án.
- Thêm tham chiếu đến System.Runtime.Serialization assembly.
Thưởng thức.
<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 bây giờ tôi nhận được lỗi khác. maxOccurs trên DownloadRequestItem phải 1 Đây là schema của tôi \t elementFormDefault => \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: sequence> \t \t \t \t \t xs: complexType> \t \t \t \t \t \t \t xs: sequence> \t \t xs: complexType> \t –
Daveo
bạn có thể vui lòng cập nhật câu hỏi ban đầu của mình bằng cách chỉnh sửa câu hỏi đó không ?? Đưa XML vào nhận xét là REALLY REALLY khó đọc và lộn xộn ..... –
wcfBlue http: //wscfblue.codeplex.com/ –