2015-09-30 15 views
7

Trong môi trường hiện tại, chúng tôi có một số thư viện chung (C# Class Library .NET 4.5.1 csproj) được tham chiếu bởi cả ứng dụng asp.net và console. Chúng tôi đang xem xét nâng cấp 1 dự án web của chúng tôi lên ASP.NET 5 để bắt đầu thử nghiệm một số thay đổi mới sắp tới.Tham khảo thư viện lớp chung cho ASP.NET 5 beta 7

Vì tôi không thể tham khảo dự án trong ASP.NET 5 đến loại thư viện csproj cũ, tôi phải tham khảo thư viện bằng DLL được biên dịch và loại bỏ dnxcore50 khỏi project.json (điều này tốt cho chúng tôi). Tuy nhiên, Chúng tôi sở hữu nguồn thư viện được chia sẻ và liên tục đưa ra các cập nhật trong môi trường DEV của chúng tôi để sửa đổi và thay đổi sẽ cần thiết thường xuyên đối với DLL. ASP.NET 5 đặt DLL bên trong một thư mục lib và không sử dụng đường dẫn đến thư mục csproj.

Bạn sẽ làm gì nếu bạn có asp.net & giao diện điều khiển ứng dụng csproj cùng với asp.net 5 ứng dụng cần chia sẻ thư viện mã chung mà không phải duy trì 2 cơ sở mã? Bạn có đề xuất một tác vụ xây dựng để biên dịch dự án thư viện chung và thay thế DLL tham chiếu trong lib trước khi biên dịch dự án asp.net 5 hay thay vào đó thiết lập một repo nuget cục bộ cho thư viện được chia sẻ của chúng tôi vì tài liệu tham khảo dự án không nằm trong câu hỏi bây giờ cho csproj? Chúng tôi là một nhóm chia sẻ với tất cả các mã này trong TFS vì vậy bất cứ điều gì tôi cần phải được nhân rộng dễ dàng cho tất cả mọi người khác.

Trả lời

2

Nếu mã chia sẻ không thay đổi thường xuyên, tôi sẽ đi với một kho lưu trữ chia sẻ nuget. Bằng cách này, bạn sẽ có được tất cả những lợi ích của việc sử dụng gói nuget: phiên bản, phục hồi dễ dàng, vv Giải pháp của bạn có thể có ít dự án và biên dịch nhanh hơn. Nhưng nếu mã chia sẻ được thay đổi liên tục, việc thực hiện quá trình khôi phục gói có thể rất đau đớn.

Có một cách khác - dnu có một lệnh tiện dụng có tên wrap. Nó kết thúc các tệp .csproj hiện có của bạn thành các tệp project.json mà sau đó có thể được tham chiếu bởi các dự án aspnet5.

Bạn có thể làm một cái gì đó như thế này:

  1. Thêm một tập tin global.json trong thư mục một số cấp cao nhất có chứa các dự án của bạn. Trong projects phần, các thư mục danh sách có chứa mã nguồn của bạn, ví dụ:

    { 
        "projects": [ "src", "test" ], 
        "sdk": { 
         "version": "1.0.0-rc1-final" 
        } 
    } 
    
  2. trong cùng một thư mục có chứa global.json thực hiện dnu wrap cho từng dự án .csproj hiện có.

    dnu wrap src/my.project/my.project.csproj 
    

    này nên tạo một thư mục có chứa wrapproject.json tập tin mà bọc .csprojs. Một tập tin mẫu trông như thế này:

    { 
        "version": "1.0.0-*", 
        "frameworks": { 
         "net45": { 
          "wrappedProject": "../../src/my.project/my.project.csproj", 
          "bin": { 
           "assembly": "../../src/my.project/obj/{configuration}/my.project.dll", 
           "pdb": "../../src/my.project/obj/{configuration}/my.project.pdb" 
          } 
         } 
        } 
    } 
    

    Lưu ý rằng wrap thư mục cũng được thêm vào projects phần trong global.json.

  3. Trong giải pháp của bạn, thêm dự án aspnet mới và thêm tham chiếu vào dự án được bao bọc. Chỉ cần thêm:

    "my.project": "" 
    

    to dependencies phần.Aspnet sẽ tự động nhận tệp global.json trong thư mục gốc và sẽ tìm kiếm các dự án trong tất cả các thư mục được liệt kê ở đó, bao gồm thư mục wrap.

  4. Bây giờ bạn đã sẵn sàng - bạn có thể sử dụng tất cả các lớp từ my.project, bước vào chúng trong khi gỡ lỗi, đi đến định nghĩa, v.v. Lưu ý rằng trong giải pháp của bạn, bạn vẫn còn cũ csproj.

Bạn có thể tìm thấy mã mẫu tại đây: https://github.com/heavymetaldev/aspnet5-wrap.

Tôi cho rằng điều này có thể hơi phức tạp nếu bạn có một số thứ tùy chỉnh trong các dự án của mình, như biên soạn có điều kiện, bao gồm tùy chỉnh, v.v.

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