So sánh các trình tạo mã XSD [đã đóng]


76

Tôi đang thực hiện một số nghiên cứu về tạo mã từ các tệp giản đồ xsd. Yêu cầu của tôi:

  • Phải tạo mã C # 2.0 (hoặc cao hơn), sử dụng các bộ sưu tập chung nếu cần.
  • Phải tạo bình luận từ bình luận xsd
  • Phải tạo mã có thể tuần tự hóa đầy đủ.
  • Có thể tạo ra các loại cơ sở có giá trị thay đổi khi tạo từ nhiều xsd với cùng một bao gồm.

(xem thêm các câu hỏi khác của tôi: Làm cách nào để tạo nhiều lớp từ xsd's với bao gồm chung?Làm cách nào để tạo nhận xét từ các thẻ xs: document trong wsdl?

Tôi đã tìm thấy các tùy chọn sau:

  1. Sử dụng xsd.exe (được cung cấp cùng với SDK và Visual Studio)
  2. XSDCodeGen từ Daniel Cazzulino
  3. Xsd2Code
  4. CodeXS
  5. XsdObjectGen của Microsoft
  6. XSDClassGen (Có vẻ như bị thiếu trong hoạt động)

Tôi có bỏ lỡ cái nào không? Vì (1), (2) và (5) không tạo mã 2.0 và tôi gặp sự cố với việc tuần tự hóa mã từ (3). Bạn sử dụng gì khi tạo mã?


Bạn đã gặp vấn đề gì với Xsd2Code? Tôi không có bất kỳ vấn đề với nó.
John Kraft

trên 5) stackoverflow.com/questions/607085/… có liên kết 2.0 XSDObjectGen tới nguồn
Greg Domjan,

Câu trả lời:


62

Tôi tin rằng XSD2Code là công cụ tốt nhất hiện có (năm 2011).

Gần đây, tôi đã trải qua quá trình tương tự trong công việc phân tích các công cụ có sẵn ngoài đó, vì vậy tôi nghĩ mình sẽ cung cấp câu trả lời cập nhật liên quan đến VS2010 .

Trình điều khiển chính của chúng tôi là xsd.exe đó không tạo tài liệu XML từ các chú thích XSD, điều mà chúng tôi muốn vì chúng tôi có hàng trăm định nghĩa kiểu. Tôi đã thử tất cả các công cụ được liệt kê ở trên cũng như các công cụ khác và hầu hết đều không được dùng nữa, không bị lỗi hoặc không thể khớp với chức năng hiện tại của xsd.exe có sẵn trong VS2010.

Xsd2CodeTuy nhiên, là một công cụ tuyệt vời và dường như được duy trì tích cực. Nó cung cấp tất cả các chức năng đã được liệt kê ở trên và nhiều hơn nữa - trang CodePlex cũng có các ví dụ tuyệt vời về cách các tùy chọn khác nhau ảnh hưởng đến đầu ra.

Nó cũng có tích hợp VS chặt chẽ, bao gồm tích hợp menu ngữ cảnh và công cụ xây dựng tùy chỉnh (có nghĩa là nếu bạn tham chiếu XSD trong dự án của mình và chỉ định công cụ tùy chỉnh, nó sẽ tự động cập nhật mã khi bạn cập nhật XSD). Tất cả đã tiết kiệm cho chúng tôi rất nhiều công việc.

Bản tóm tắt nhanh về các công cụ khác mà tôi đã xem xét:

  • Dingo - Có vẻ phù hợp hơn với Java
  • XSDCodeGen - Thêm bản demo về cách viết một công cụ xây dựng tùy chỉnh
  • CodeXS - Một công cụ khá tốt, nhưng ít tích hợp, nhiều tính năng và không còn được duy trì
  • XSDObjectGen - Không còn được duy trì, ít chức năng hơn xsd.exe hiện tại
  • XSDClassGen - Không thể định vị nó
  • Thư viện OXM - Khuyên bạn nên xem dự án này, được duy trì và chức năng tuyệt vời
  • LINQ sang XSD - Dự án rất hay , nhưng không phải là thứ tôi đang tìm kiếm

Phụ lục: Nếu bạn quyết định tiếp tục với XSD2Code, có một số vấn đề tôi đã tìm thấy khi làm việc với công cụ dòng lệnh. Đặc biệt, có một số lỗi với quá trình xử lý đối số yêu cầu một số đối số theo một thứ tự nhất định cũng như một số phụ thuộc không có tài liệu (ví dụ - tham số tự động & phiên bản .NET là thứ tự cụ thể và phụ thuộc). Sau đây là các bước tôi đã sử dụng để tạo mã bằng XSD2Code và sau đó dọn dẹp đầu ra - lấy các bit áp dụng cho bạn nếu cần:

Chạy tệp lô sau để tạo mã ban đầu, thay đổi đường dẫn đến đúng vị trí:

@echo off

set XsdPath=C:\schemas
set OutPath=%XsdPath%\Code
set ExePath=C:\Progra~1\Xsd2Code
set Namespace=InsertNamespaceHere

echo.Starting processing XSD files ...
for /f %%a IN ('dir %XsdPath%\*.xsd /a-d /b /s') do call:ProcessXsd %%a

echo.Finished processing XSD files ...
echo.&pause&
goto:eof

:ProcessXsd
%ExePath%\Xsd2Code %~1 %Namespace% %XsdPath%\Code\%~n1%.cs /pl Net35 /if- /dc /sc /eit
echo.Processed %~n1
goto:eof

Thực hiện các bước sau để dọn dẹp mã đã tạo, nếu cần:

  1. Thay thế Regex - dự án hiện tại, trường hợp, toàn bộ từ - [System.Runtime.Serialization.DataContractAttribute (Tên: b * =: b *: q,: b Không gian tên: b =: b * {: q})] với [DataContract ( Không gian tên = \ 1)]
  2. Thay thế - dự án hiện tại, trường hợp, toàn bộ từ - [System.Runtime.Serialization.DataMemberAttribute ()] với [DataMember]
  3. Regex thay thế - dự án hiện tại, trường hợp, toàn bộ từ - System.Nullable \ <{: w}> với \ 1 \?
  4. Regex thay thế - mở tài liệu, trường hợp, toàn bộ từ - {: w} TYPE với \ 1
  5. Thay thế - mở tài liệu, trường hợp, toàn bộ từ - System.DateTime bằng DateTime , sau đó thêm các câu lệnh bị thiếu bằng cách sử dụng
  6. Thay thế - mở tài liệu, trường hợp, toàn bộ từ - [System.Xml.Serialization.XmlIgnoreAttribute ()] bằng [XmlIgnore]
  7. Thay thế - dự án hiện tại - System.Xml.Serialization.XmlArrayAttribute với XmlArray
  8. Thay thế - dự án hiện tại - System.Xml.Serialization.XmlArrayItemAttribute với XmlArrayItem
  9. Regex thay thế - dự án hiện tại - , [: Wh] + /// \ <nhận xét / \> với ,

Hy vọng rằng sẽ giúp một ai đó.


2
Tôi phải đồng ý rằng Xsd2Code hiện là nhà vô địch. Chỉ cần lưu ý bổ trợ không tải chính xác nếu bạn đã di chuyển vị trí 'Tài liệu' mặc định của mình, theo cách thủ công hoặc qua GPO. Giải pháp là lấy tệp bổ trợ từ vị trí cài đặt và đặt nó vào thư mục Documents \ Visual Studio 2010 \ Addins \.
Stephen Patten

1
xsd2code dường như đã chết. Tôi hy vọng một phiên bản mới sắp ra mắt, có một lỗi chặn lớn và một vài lỗi khác ngăn chúng tôi sử dụng thực tế.
womp

Chỉ cần một lưu ý: Tôi đã xem qua XsdClassGen trên Nuget (xem nuget.org/List/Packages/XsdClassGen ). Nó sử dụng mẫu T4, rất đẹp, nhưng nó rất sơ khai.
devuxer 28/10/11

2
Được thêm vào Schalk Versteegdưới dạng chỉnh sửa: XSDtoClasses code.google.com/p/xsd-to-classes -Extendable VS plugin, very similar in capabilities to XSD2Code.
InfantPro'Aravind '

3
XSD2Code không làm việc cho Visual Studio 2012.
cederlof

9

Tôi vẫn chưa kiểm tra điều này, nhưng Linq2XSD có thể là một sự thay thế hữu ích.

Tôi sẽ thử cái này. LINQ với thế hệ XSD sẽ tốt hơn bất kỳ công cụ nào mà bạn đã đề cập - miễn là nó hoạt động tốt.


5
đừng quá lo lắng rằng nó là một 'dự án chết'. nếu nó khá hoàn chỉnh và hoạt động thì nó không 'chết' - nó đang hoạt động! có vẻ ok cho tôi cho đến nay
Simon_Weaver

2
Tôi hiện đang sử dụng thành công Linq to Xsd trong một dự án đang hoạt động. Nó có vẻ là trình ánh xạ xsd đến lớp 'hoàn chỉnh' nhất mà tôi đã tìm thấy. Tôi đã thử sử dụng Xsd2Code, nhưng nó không ánh xạ các loại phức tạp của xsd cho lắm - tôi gặp phải hạn chế về mẫu xs: được ánh xạ hoàn hảo trong Linq đến Xsd, nhưng bị thiếu trong Xsd2Code. Đầu mũi - tải về nguồn cho LINQ to XSD - nó có một bó toàn bộ các tài liệu và các dự án ví dụ mà không được liệt kê trong tab 'tài liệu' của CodePlex - tải về tại đây
Lanceomagnifico

3
Tôi đã sử dụng nó một vài năm nay. Nó có một số lợi thế lớn so với các công nghệ tổ chức nào khác, và tôi nghĩ đó là một sự xấu hổ thực MS bỏ nó
Simon_Weaver

Không làm việc với Visual Studio 2012.
cederlof

Vẫn đang sử dụng nó! (Không dành cho những thứ mới, nhưng nó vẫn hoạt động trong .NET Core).
Simon_Weaver


2

Tôi có một dự án hơn một năm trước, chúng tôi đã sử dụng CodeXS. Với một số điều chỉnh nhỏ (một tập lệnh làm sạch mã được tạo một chút), nó đã hoạt động rất hấp dẫn.

Ngoài ra còn có Dingo , có một số tính năng mở rộng rất tốt (mà chúng tôi không cần).



0

Trình tạo lớp XSD tốt nhất mà tôi đã tìm thấy là thinktecture WSCF.blue . Nó đẹp hơn hầu hết những cái khác vì hai lý do:

  1. Sửa lỗi đặt tên. Điều đó có nghĩa là cách viết hoa và đa dạng hóa các loại và tên tài sản.
  2. Tạo một tệp riêng cho mỗi lớp.

Hoặc, nếu bạn đang tìm kiếm giải pháp T4, bạn có thể thử XsdClassGen . Cái này không phù hợp với tôi. Nhưng tin tốt là đó là tệp T4 nên rất dễ sửa!


-2

Đây là ví dụ dựa trên web về việc sử dụng XSLT để chuyển đổi mã XML sang C #. Ví dụ lấy một mô hình (XML) mô tả các dịch vụ (về cơ bản là tên dịch vụ, không gian tên và danh sách hoạt động), sau đó nó tạo ra các dịch vụ WCF (giao diện, thông báo, lỗi, kiểm tra, v.v.) tất cả trong C # .net.


Trang web không còn nữa, và câu trả lời của bạn cũng không hữu ích.
emcoding
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.