2012-01-09 28 views
14

Tôi viết rất nhiều thành phần và thư viện cho Delphi, hầu hết trong số đó yêu cầu sử dụng BPL Packaging để chúng có thể được cài đặt vào IDE. Điều này đủ đơn giản và hoạt động tốt, cho đến khi bạn muốn duy trì một tập hợp các tệp dự án trọn gói (trong một nhóm dự án), nhưng cũng muốn biên dịch và phân phối các gói tương tự cho các phiên bản Delphi khác nhau.Gói (BPL) Suffix đặt tên tự động

Cho đến nay tôi đã tạo ra một dự án trọn gói khác nhau cho mỗi phiên bản của Delphi, và xác định một cách rõ ràng ở phiên bản Delphi định danh như một hậu tố (ví dụ Kinect_XE.bplKinect_XE2.bpl).

Tôi biết rằng, trong Project Tùy chọn cho một dự án trọn gói, dưới Mô tả, có các lĩnh vực LIB tiền tố và (quan trọng hơn cho nhu cầu của tôi) LIB suffix.

Tôi biết thêm rằng nếu tôi đặt một giá trị trong hậu tố LIB LIB, nó sẽ được thêm vào cuối tên tệp BPL đã biên dịch.

Câu hỏi của tôi, tuy nhiên, là đầu tiên cho dù đó có thể có IDE tự động cư LIB suffix lĩnh vực với IDE/RTL Version số, và nếu như vậy ... làm thế nào?

Tôi khá chắc chắn này là có thể, vì nó sẽ xuất hiện mà vcl120.bpl (và các đối tác của mình cho mỗi phiên bản tương ứng của Delphi) có thể được tham chiếu (theo yêu cầu) các gói của riêng bạn sử dụng chỉ vcl thay vì phải nhập đầy đủ vcl120. Đó là, trên thực tế, hành vi tương tự này tôi hy vọng đạt được ... nơi các gói của tôi có thể tham chiếu nội bộ (như cần thiết) mà không cần phải cung cấp các tham chiếu phiên bản cụ thể để chứa hậu tố.

Quan trọng không kém là giải quyết điều này sẽ cho phép tôi duy trì một tập hợp các tệp dự án trong một nhóm dự án duy nhất (ngoại trừ XE2 nơi tệp dự án của nó không nhất thiết phải hoạt động rất tốt với các phiên bản trước của Delphi cho các nền tảng bổ sung).

tôi nghi ngờ rằng tôi có thể cần phải đặt một giá trị như $ (VER) (hoặc một cái gì đó tương tự) trong LIB suffix lĩnh vực, nhưng điều này dường như không làm việc và tôi đã lùng sục Google tìm kiếm chính xác dung dịch.

Hy vọng bạn có thể trợ giúp!

UPDATE 1

Tôi bây giờ viết một plugin IDE được sử dụng với (trong ít nhất) Delphi 2007 đến XE2, mang đến cho DLL và BPL dự án là một lựa chọn mới mang tên AutoSuffix. Khi được bật Trên, bất kỳ IDE nào có cài đặt plugin AutoSuffix sẽ ngay lập tức áp dụng hậu tố phiên bản IDE chính xác cho dự án.

Số tự động AutoSuffix sẽ được cung cấp miễn phí cho tất cả mọi người trong vòng 24 giờ tới và câu hỏi này được cập nhật tương ứng.

CẬP NHẬT 2

Okay ... Delphi 2007 là trở thành một nỗi đau! Tôi đã thực hiện AutoSuffix làm việc với 2009 để XE2, cho đến nay, nhưng 2007 đòi hỏi một ít thời gian hơn (kiên nhẫn đánh giá cao).

CẬP NHẬT 3

Nó sẽ xuất hiện như là mặc dù Embarcadero đã nghe tiếng kêu chung của chúng ta đối với gói đơn giản hơn thống nhất giữa các phiên bản.

Đánh dấu sẽ đẩy thông qua để xem các phiên bản tương lai của Delphi có thể chứa một tính năng {$ LIBSUFFIX AUTO} hay không. Tôi hy vọng sẽ sớm nghe lại liệu đây có phải là trường hợp không. Nếu vậy, nó chắc chắn ảnh hưởng đến cách AutoSuffix sẽ cần phải làm việc trên XE2 và các phiên bản cũ hơn (như hiện nay nó không cung cấp công tắc AUTO đơn giản .. nó có phương pháp riêng của nó).

Tôi hy vọng rằng EMB sẽ thực hiện yêu cầu này một cách nghiêm túc, để nó trở thành trường hợp đơn giản khi sử dụng AutoSuffix trên các phiên bản hiện có để thống nhất quy trình trên tất cả các phiên bản!

+0

Không phải phiên bản trình biên dịch mà là phiên bản IDE/RTL. – OnTheFly

+0

Đúng ... chỉnh sửa cho phù hợp! Một sai lầm ngớ ngẩn về phía tôi! – LaKraven

+2

Tôi nhận được ** Không có báo cáo # 83229 hoặc bạn không được phép xem báo cáo đó. ** khi tôi cố truy cập vào báo cáo (đã đăng nhập) – LaKraven

Trả lời

5

AFAIK cho Delphi lên đến XE2 không có tự động hóa để thực hiện việc này.

Liên quan đến đòi hỏi khoản: khi bạn require một gói bạn đang thực sự sử dụng DCP, mà không kế thừa LIBSUFFIX. Vì vậy, nó là đủ để yêu cầu VCL.dcp trong thời gian biên dịch, trong khi VCL160.bpl thực sự được sử dụng trong thời gian chạy. DCP bao gồm tên BPL hoàn chỉnh để giải quyết điều đó.

Điều này làm cho cách tiếp cận LIBSUFFIX vượt trội so với đơn giản "đổi tên gói cho mỗi phiên bản của Delphi".

Một giải pháp như được đề xuất trong QC83229 sẽ giúp dễ dàng chuyển gói sang phiên bản Delphi mới hơn, nhưng sau đó bạn vẫn bị kẹt với các tệp dproj không tương thích ngược.

Tôi thường sử dụng các thư mục khác nhau cho mỗi phiên bản Delphi, nơi chỉ có các tệp dự án được lưu trữ. Đối với một phiên bản Delphi mới, tôi chỉ phải sao chép một thư mục và thay đổi LIBSUFFIX.

+0

+1, ý tưởng hay. Có phải QC'ed không? – kludg

+0

@Serg: có, nhưng riêng tư trong thời gian này. xem nhận xét cho câu hỏi –

+0

Tôi đang xây dựng một plugin để giải quyết vấn đề khi chúng ta nói! – LaKraven

3

LIBSUFFIX chỉ thị nằm trong tệp * .dpk và bạn có thể chỉnh sửa tệp * .dpk theo cách thủ công.

Bạn có thể viết, ví dụ

{$IFDEF CONDITIONALEXPRESSIONS} 
    {$IF CompilerVersion = 20.0} 
{$LIBSUFFIX '120'} 
    {$IFEND} 
    {$IF CompilerVersion = 21.0} 
{$LIBSUFFIX '140'} 
    {$IFEND} 
{$ENDIF} 

Điều xấu là IDE không tôn trọng chỉnh sửa thủ công của file * .dpk và xóa chúng sau đó bạn thực hiện thay đổi trong một gói. Đó là lý do tại sao một số nhà cung cấp thành phần sử dụng định nghĩa có điều kiện trong tệp * .dpk nói trong hướng dẫn cài đặt nếu được yêu cầu lưu thay đổi nói 'KHÔNG'.

+0

Cũng được lưu trong tệp .dproj dưới tên thuộc tính 'DllSuffix'. Tôi không biết thiết lập nào sẽ thắng và tại sao nó lại bị trùng lặp. –

+0

Ngoài ra, các chỉ thị này phải ở dưới cùng của nguồn gói vì Hệ thống không nằm trong phạm vi cho đến khi kết thúc 'chứa'. – OnTheFly

+5

Việc cài đặt toàn bộ gói trong Delphi là một địa ngục. Với Delphi 7 bạn đã có 2 tệp tin cho thông tin gói (* .dpk và * .res), bây giờ bạn có 3 tệp, với bản sao, mặc dù 1 tệp là quá đủ. Thật không may Embarcadero không quan tâm. – kludg

2

Đề xuất của tôi là thêm tùy chọn này dưới dạng tùy chọn có thể định cấu hình để đặt các bộ tùy chọn dự án (xem QC#86491.) Thay vì cập nhật tất cả các gói, nó sẽ là đủ để cập nhật một tập hợp tùy chọn tập tin duy nhất.

Thực tế, có vẻ như thẻ DllSuffix được nhận dạng bởi tập hợp tùy chọn đặt trong Delphi XE/XE2. Thêm <DllSuffix>160</DllSuffix> vào phần <PropertyGroup> của tệp tập hợp tùy chọn sẽ khiến hậu tố được thêm vào gói trong trình quản lý dự án. Tuy nhiên, bạn vẫn phải mở các tùy chọn dự án và nhấn OK để nó được lưu vào tệp .dpk.

Tôi đồng ý rằng nó sẽ cực kỳ hữu ích với tính năng này (tôi cũng nghĩ rằng đối với các gói trong RTL.)

Các vấn đề liên quan