Tìm kiếm Bộ phân tích cú pháp đối số dòng lệnh cho .NET [đã đóng]


79

Tôi đang tìm trình phân tích cú pháp đối số dòng lệnh, chẳng hạn như "Trình phân tích cú pháp dòng lệnh" từ http://www.sellsbrothers.com/tools/Genghis/ .

Các tính năng tôi đang tìm kiếm:

  • Tự động tạo mức sử dụng
  • Có thể kiểm tra các thông số bắt buộc và tùy chọn
  • Các tham số phải hỗ trợ IEnumerable với hỗ trợ dấu phân tách
  • Nên hỗ trợ các thông số cờ
  • Rất vui được hỗ trợ kết hợp các tham số như "/ fx" == "/ f / x"
  • Sẽ rất tốt nếu bạn không ép buộc cho một khoảng trắng sau một tham số như "/ftest.txt" == "/ f test.txt"

Tái bút: "Trình phân tích cú pháp dòng lệnh" khá tốt, tôi thực sự thích thiết kế của nó nhưng không có tài liệu hướng dẫn, không có bản cập nhật mới và tôi không thể tìm ra cách làm một số công việc như cách kiểm tra các thông số cần thiết.


Nhất linh hoạt .NET dòng lệnh phân tích cú pháp có vẻ là: CommandLineParser gsscoder của
AlexMelw

Câu trả lời:


52

Thư viện phân tích cú pháp dòng lệnh bên thứ 3 yêu thích của cá nhân tôi là Bộ phân tích dòng lệnh và tôi cho rằng đây là thư viện mà bạn đang đề cập đến. Bản phát hành gần đây nhất cách đây chưa đầy 2 tháng và có những cam kết thường xuyên. Nếu bạn muốn một sản phẩm hoàn thiện hơn, bạn có thể tìm kiếm thư viện bảng điều khiển trong dự án đơn (xin lỗi, tôi dường như không thể tìm thấy liên kết trực tiếp đến không gian tên vào lúc này, nhưng nó là một phần của khung đơn)


1
Điều này có vẻ tốt, tôi sẽ thử nó.
dr. ác

Tôi đang cố gắng triển khai điều này, nó có hỗ trợ các đối số "cờ" không? chẳng hạn như "-enable" không yêu cầu giá trị chỉ đúng / sai. Tôi không thể tìm thấy nó.
dr. ác

Nếu tôi nhớ đúng thì nó không nằm ngoài hộp, nhưng sẽ không quá nhiều việc để sửa đổi trình phân tích cú pháp để tìm kiếm các công tắc không đủ tiêu chuẩn cho các giá trị boolean thay vì mong đợi đúng / sai được chỉ định.
Raoul

Nhân tiện, trình phân tích cú pháp đơn âm được gọi là Mono.GetOptions. Điều đó chắc chắn hỗ trợ những gì bạn đang tìm kiếm. Bạn chỉ có thể tải xuống phần đó của nguồn khung đơn và xây dựng nó và tham chiếu nó trong dự án của bạn như một cảnh báo.
Raoul

Bản thân tôi đã sử dụng thư viện này và đồng ý rằng đây là một thư viện tuyệt vời.
Noldorin 09/09/09

20

Hãy xem ndesk.options.

Bây giờ nó được gọi là Mono.Options .


3
Chúng tôi đã sử dụng ndesk.options với rất nhiều thành công. Đó là một lớp duy nhất bạn chỉ có thể biên dịch thành mã của bạn: ndesk.org/Options
Sean Carpenter

Hiện tại, trang của họ có cảnh báo về việc NDesk.Options không ổn định. Chỉ là một cảnh báo ... có thể sử dụng phiên bản cũ hơn.
Kilhoffer

Tôi cũng đã có trải nghiệm tốt với NDesk.Options. Nó được mô phỏng dựa trên Getopt :: Long của Perl (rất tuyệt vời).
jwd

5

Một trình phân tích cú pháp dòng lệnh C phổ biến và khá toàn diện là GNU getopt . Điều này đã được chuyển (hoặc sao chép) cho C # /. Net nhiều lần. Một số trong số này bao gồm:

Bạn chọn đi! Có một số người khác và google có thể cho bạn biết về những điều đó,


4

Đáng tiếc là không có hỗ trợ được xây dựng để xử lý điều đó theo cách tiêu chuẩn. Bạn đã xem xét PowerShell chưa? Tôi cá là có một lớp trong trình bao đó làm chính xác những gì bạn muốn hoặc một cái gì đó tương tự.


Vâng, PowerShell có lẽ là cách để đi trong hầu hết các trường hợp. Viết một cmdlet khá dễ dàng, nhưng lại mở ra rất nhiều khả năng mà không cần nhiều hoặc ít.
John Saunders

Tôi không chắc bạn muốn nói gì khi nhìn vào powershell. Nó không phải là mã nguồn mở hay ý bạn là tôi có thể tìm thấy một lệnh ghép ngắn và chuyển nó thành cú pháp .NET.
dr. ác

3
Tôi nghĩ ý của anh ấy là "viết mã của bạn dưới dạng lệnh ghép ngắn PowerShell thay vì tệp thực thi độc lập."
Joel Mueller

Kế hoạch hành động mặc định của tôi những ngày này là viết các chương trình hướng dòng lệnh dưới dạng lệnh ghép ngắn PowerShell. Bằng cách đó, tôi không phải lo lắng về cách dòng lệnh được phân tích cú pháp.
Peter Stephens

Tôi nghĩ việc phân tích cú pháp đối số của powerhell thật là kinh khủng.
Tim Abell

2

Chỉnh sửa: như fatcat1111 đã chỉ ra, tính năng này không có trong phiên bản cuối cùng của .net 4.0.

C # 4.0 có một cái khá hay. Có lẽ vẫn chưa hữu ích lắm, nhưng bạn có thể muốn xem xét thứ gì đó sẽ giúp dễ dàng chuyển sang chế độ cài sẵn khi nó xuất hiện. Bart De Smet đã nói về nó trên blog B # của mình


2
System.Shell.CommandLine cuối cùng đã bị cắt khỏi phiên bản 4 của Framework.
Justin R.


1

Hãy xem xét rằng một khi bạn bắt đầu sử dụng trình phân tích cú pháp này, bạn sẽ phải tự mình duy trì nó hoặc phụ thuộc vào người khác để duy trì nó cho bạn. Tốt hơn hết là bạn nên viết bài của riêng mình, bắt đầu từ những yêu cầu quan trọng nhất, tức thời nhất của bạn. Tôi thấy rằng không mất quá nhiều công sức để tạo ra một số phân tích cú pháp dòng lệnh khá phức tạp cho hầu hết các ứng dụng dựa trên bảng điều khiển mà tôi đã làm việc.

Tôi cũng nhận thấy rằng khi việc phân tích cú pháp trở nên quá phức tạp, có thể đã đến lúc ngừng sử dụng dòng lệnh.


1
Vì đây là một vấn đề nổi tiếng và gần như bắt buộc đối với mọi công cụ dòng lệnh ngoài kia nên tôi đã giả định rằng cần phải có một số giải pháp hoàn thiện và việc duy trì và viết âm thanh của riêng tôi sẽ tiêu tốn một chút thời gian của tôi. Nhưng này, vì không có đủ câu trả lời ở đây nên có thể bạn đúng.
dr. ác

1
@Downvoter: -2 đại diện không làm phiền tôi. Nếu bạn muốn tạo ra sự khác biệt thì hãy nêu lý do của việc downvote.
John Saunders 10/09/09

1

Tôi cá rằng đây không phải là thứ bạn đang tìm kiếm, nhưng:

Ai đó ở đây đã gặp vấn đề đó, và suy nghĩ đầu tiên của anh ấy là "này, ocaml có một cái khá tốt!", Và nhanh chóng chuyển nó sang F #.


1 github.com/nessos/UnionArgParser là một tốt đẹp ví dụ
Ruben Bartelink

1

Tôi đang sử dụng trình phân tích cú pháp từ sách dạy nấu ăn C # 3.0.

Tất cả các ví dụ từ cuốn sách này có thể được tải xuống tại đây: http://examples.oreilly.com/9780596516109/

Tìm kiếm 'Đối số' và bạn sẽ tìm thấy nó. Bạn phải thực hiện một số thay đổi mã nhỏ để đưa nó ra khỏi toàn bộ nội dung vào lớp của riêng bạn, nhưng đây không phải là vấn đề lớn.

Nó hỗ trợ tất cả các điểm của bạn ngoại trừ hai điểm cuối cùng (kết hợp tham số và không gian thiếu).


1

Các thư viện BizArk chứa một phân tích cú pháp dòng lệnh.

Về cơ bản, bạn chỉ cần tạo một lớp kế thừa từ CmdLineObject, thêm các thuộc tính mà bạn muốn điền từ dòng lệnh, thêm CmdLineArgAttribute vào các thuộc tính, sau đó gọi Khởi tạo trong chương trình của bạn. Nó cũng hỗ trợ đối số URL ClickOnce!

Các tính năng (từ trang web) ...

  • Khởi tạo tự động: Thuộc tính lớp được đặt tự động dựa trên các đối số dòng lệnh.
  • Thuộc tính mặc định: Gửi một giá trị mà không chỉ định tên thuộc tính.
  • Chuyển đổi giá trị: Sử dụng lớp ConvertEx mạnh mẽ cũng được bao gồm trong BizArk để chuyển đổi giá trị sang loại thích hợp.
  • Cờ boolean. Cờ có thể được chỉ định đơn giản bằng cách sử dụng đối số (ví dụ: / b cho true và / b- cho false) hoặc bằng cách thêm giá trị true / false, yes / no, v.v.
  • Mảng đối số. Chỉ cần thêm nhiều giá trị sau tên dòng lệnh để đặt thuộc tính được định nghĩa là một mảng. Ví dụ, / x 1 2 3 sẽ điền x vào mảng {1, 2, 3} (giả sử x được định nghĩa là một mảng các số nguyên).
  • Bí danh dòng lệnh: Một thuộc tính có thể hỗ trợ nhiều bí danh dòng lệnh cho nó. Ví dụ: Trợ giúp sử dụng bí danh ?.
  • Nhận dạng một phần tên. Bạn không cần đánh vần tên đầy đủ hoặc bí danh, chỉ cần đánh vần đủ để trình phân tích cú pháp phân biệt thuộc tính / bí danh với những người khác.
  • Hỗ trợ ClickOnce: Có thể khởi tạo thuộc tính ngay cả khi chúng được chỉ định dưới dạng chuỗi truy vấn trong URL cho các ứng dụng được triển khai ClickOnce. Phương thức khởi tạo dòng lệnh sẽ phát hiện xem nó có đang chạy dưới dạng ClickOnce hay không để mã của bạn không cần phải thay đổi khi sử dụng nó.
  • Tự động tạo /? trợ giúp: Điều này bao gồm định dạng đẹp có tính đến chiều rộng của bảng điều khiển.
  • Tải / Lưu đối số dòng lệnh vào một tệp: Điều này đặc biệt hữu ích nếu bạn có nhiều bộ đối số dòng lệnh lớn, phức tạp mà bạn muốn chạy nhiều lần.

0

Tôi là một fan hâm mộ của cổng C # sang OptParse, một thư viện được tích hợp sẵn bằng Python. Nó khá đơn giản để sử dụng so với hầu hết các đề xuất khác ở đây và chứa một số tính năng hữu ích ngoài việc chỉ phân tích cú pháp tự động.


0

Bạn có thể thích một chiếc Rug.Cmd của tôi

Trình phân tích cú pháp đối số dòng lệnh dễ sử dụng và có thể mở rộng. Xử lý: Bool, Plus / Minus, String, String List, CSV, Enumeration.

Được xây dựng trong '/?' chế độ trợ giúp.

Được xây dựng trong '/??' và chế độ tạo tài liệu '/? D'.

static void Main(string[] args) 
{            
    // create the argument parser
    ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing");

    // create the argument for a string
    StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments");

    // add the argument to the parser 
    parser.Add("/", "String", StringArg);

    // parse arguemnts
    parser.Parse(args);

    // did the parser detect a /? argument 
    if (parser.HelpMode == false) 
    {
        // was the string argument defined 
        if (StringArg.Defined == true)
        {
            // write its value
            RC.WriteLine("String argument was defined");
            RC.WriteLine(StringArg.Value);
        }
    }
}

Chỉnh sửa: Đây là dự án của tôi và như vậy câu trả lời này không được coi là sự chứng thực từ bên thứ ba. Điều đó nói rằng tôi sử dụng nó cho mọi chương trình dựa trên dòng lệnh mà tôi viết, nó là mã nguồn mở và tôi hy vọng rằng những người khác có thể hưởng lợi từ nó.

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.