2012-11-18 30 views
6

Nhà cung cấp loại F # của tôi dường như không hoạt động trừ khi tất cả các phụ thuộc của nó nằm trong cùng một thư mục. Điều này không hoạt động tốt cho việc phân phối các nhà cung cấp loại thông qua nuget. Bất kỳ đề xuất nào về cách giải quyết vấn đề này?Làm cách nào để phân phối Nhà cung cấp Loại F # qua NuGet?

Tôi sẽ gặp lỗi như: lỗi FS3033: Nhà cung cấp loại 'Froto.Gen.ProtoTypeProvider' đã báo cáo lỗi: Không thể tải tệp hoặc lắp ráp 'Froto.Roslyn, Version = 0.0.0.1, Culture = neutral, PublicKeyToken = null 'hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy các tập tin được chỉ định.

cung cấp Các loại có trong thư viện này: gói \ Froto.Gen.0.0.0.1 \ lib \ net45 \ Froto.Gen.dll

Các phụ thuộc là tất cả trong dự án. Nếu tôi sao chép tất cả chúng vào các gói \ Froto.Gen.0.0.0.1 \ lib \ net45 \, nhà cung cấp loại hoạt động.

2012-11-19 Cập nhật: Tôi sẽ tạo gói NuGet ngay hôm nay để giải thích vấn đề tốt hơn.

+0

Tệp DLL "Froto.Roslyn" của bạn có sẵn trong gói Nuget của riêng nó không? Nếu không, làm thế nào bạn giả định rằng một khách hàng xuống "Froto.Gen.ProtoTypeProvider" có quyền truy cập vào sự phụ thuộc? Nếu nó không có sẵn, nó sẽ không hoạt động (đó là lý do tại sao sao chép tất cả các phụ thuộc của bạn vào gói Nuget không hoạt động). – Chris

Trả lời

4

Vấn đề này không phải là F # cụ thể. Bạn hoàn toàn phải hoặc là

  • tàu tất cả phụ thuộc yêu cầu như một phần của gói NuGet bạn
  • hãy NuGet biết rằng gói của bạn phụ thuộc vào các gói khác mà sẽ cung cấp các tài liệu tham khảo cần thiết

Một gói NuGet thể dễ dàng chứa nhiều dll (nếu được đóng gói chính xác). Bạn có thể đọc thêm abou cách tạo gói tại đây: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package

Nếu bạn gặp sự cố khi tích hợp NuGet với các dự án kịch bản msbuild của mình, tôi khuyên bạn nên xem các tập lệnh mà các dự án nguồn mở khác sử dụng để xây dựng gói NuGet của họ. ra FSharpX hoặc FSharp Power Pack).

+0

Gói NuGet tham chiếu đến các phụ thuộc bắt buộc. Tất cả các phụ thuộc được tải xuống và là một phần của dự án. Phần F # cụ thể là nhà cung cấp loại không tải các loại từ dự án, nhưng chỉ có cùng một thư mục. Tôi đã hy vọng nó có thể tìm thấy sự phụ thuộc từ dự án. Tôi có thể bao gồm một số phụ thuộc trong cùng một thư mục, nhưng tôi không nghĩ rằng tôi có quyền bao gồm một số phụ thuộc như Roslyn. –

+0

@CameronTaggart: Tôi thực sự không hiểu ý bạn là gì 'dự án' nhưng tôi cho rằng bạn có nghĩa là một tham chiếu lắp ráp trong MSBuild/VisualStudi, mà cuối cùng sẽ được sao chép bên cạnh các dự án của bạn trong bin/folder. Tôi không thể tưởng tượng F # Loại nhà cung cấp đi chệch khỏi các quy tắc tải lắp ráp của CLR, do đó, vấn đề của bạn nên được dễ dàng để sửa chữa. Bạn có thể chỉ cho tôi gói NuGet của bạn không? –

+1

Tôi thực sự có thể sai về các câu lệnh trên, có vẻ như trong một Nhà cung cấp Loại F được gọi lúc biên dịch thay vì thời gian chạy. Thats một chút bất ngờ vì tôi giả định họ sẽ làm việc tương tự như System.Expression, mà biên dịch tại thời gian chạy. Có vẻ như bạn thực sự phải làm những gì @ovatsus đề xuất. –

3

Đã xảy ra sự cố tương tự với FSharpx.TypeProviders phụ thuộc vào FSharpx.Core. Giải pháp là sử dụng ILMerge để hợp nhất tất cả các phụ thuộc vào nhà cung cấp kiểu. Kiểm tra chuỗi trong https://github.com/fsharp/fsharpx/issues/91

+0

Sẽ hữu ích khi thêm ilmerge này làm mục tiêu msbuild. Mục tiêu mới này có thể được thêm vào các dự án hiện có thông qua một nugget – nicolas

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