2012-08-07 35 views
36

Tôi sẽ nói ra một vài câu hỏi ở đây ... đầu tiên, với NuGet là nó có thể tạo ra một gói từ một vài DLL? Không có dự án studio trực quan, chỉ là dòng lệnh và một vài tệp DLL được biên dịch trước.NuGet Assembly bên ngoài thư mục lib

Thứ hai, giả sử điều đó là có thể, tại sao tôi liên tục nhận được cảnh báo "Lắp ráp bên ngoài thư mục lib"? Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến để có được hội đồng liên kết để thêm mình là tài liệu tham khảo bên trong của gói NuGet.

cấu trúc tập tin của tôi trông như thế này

Root 
    - File1.dll 
    - lib 
    - File2.dll 
    - File3.dll 

Khi tôi nói với NuGet để đóng gói nó sử dụng một .nuspec như thế này

<?xml version="1.0"?> 
<package > 
    <metadata> 
    <id>File1.dll</id> 
    <version>1.0.0</version> 
    <authors>thisguy</authors> 
    <owners>thisguysmom</owners> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>This is some library</description> 
    <releaseNotes>Porting to NuGet</releaseNotes> 
    <copyright>Copyright 2012</copyright> 
    <references> 
     <reference file="File2.dll" />  
     <reference file="File3.dll" /> 
    </references> 
    </metadata> 
</package> 

tôi nhận được cảnh báo đó. Từ những gì tôi đang đọc, tôi thậm chí không cần phải xác định nút tham chiếu trong bất kỳ dự án nào của tôi, vì các mục trong thư mục lib sẽ tự động được thêm làm tham chiếu?

Có ai ngoài đó hiểu được sự cố NuGet này không?

Trả lời

9

Bất kỳ dll nào bạn muốn tham chiếu phải nằm trong thư mục lib. Cảnh báo là bởi vì file1.dll nằm ngoài lib và sẽ bị bỏ qua trong quá trình cài đặt gói. (Thư mục đặc biệt khác là "nội dung" và "công cụ")

tôi muốn sử dụng cấu trúc này:

Root 
    - lib 
    - File1.dll 
    - File2.dll 
    - File3.dll 

Xem: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions để biết thêm chi tiết.

+19

xin lỗi, nhưng thư mục lib nào? Tôi đã làm theo hướng dẫn này (http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package) để tạo một gói từ một assembly và không thấy bất kỳ thư mục lib nào - chỉ một lệnh để tạo một tệp spec và sau đó là tệp nupkg – DevDave

+2

@DevDave, hãy xem: http://docs.nuget.org/Create/Enforced-Package-Conventions –

0

Alexandre đề cập đến thư mục "lib" được tạo khi bạn tạo gói NuGet. Bạn có thể mở tệp .nupkg giống như bạn làm bất kỳ tệp zip nào. Trong đó, bạn sẽ thấy thư mục lib \ netXX trong đó XX là phiên bản của khung công tác .NET mà bạn đang nhắm mục tiêu. Vì vậy, khi bạn đang đóng gói tập tin NuGet của bạn, hãy chắc chắn File1.dll nằm trong thư mục lib.

7

Bạn có thể thêm tài liệu tham khảo để dll khác bằng cách thêm bên dưới thẻ bên trong tập tin nuspec

<package> 
    <metadata> 
     ... 
</metadata> 
<files> 
<file src="..\ReferencedFolder\*.*" target="lib\net40\" /> 
</files> 
</package> 
+0

Tôi thấy rằng 'src =" ../ Xxx ".. .' không hoạt động (mặc dù các tài liệu nói nó nên); nhưng vì 'src' liên quan đến tham số' BasePath', bạn có thể thay đổi 'BasePath' thành gốc của tất cả các tệp mà bạn muốn đưa vào. –

17

Tôi chỉ chạy vào vấn đề này. Nuget đang mong đợi một cấu trúc trông giống như:

root 
    - lib 
    - net40 
     - File1.dll 
     - File2.dll 
     - File3.dll 

net40 hoặc net20 hoặc net45 phù hợp với phiên bản .net của bạn.

chạy

nuget pack yourlibrary.nuspec 

để gói nó lên.

Điều đó sẽ đóng gói thư mục bán buôn và đặt nó vào nupkg. Các thông báo lỗi sẽ biến mất tại thời điểm đó.

+7

Danh sách 'net20',' net40', 'net45',… được hỗ trợ ở đâu? Làm những điều này chỉ ngăn cản sự bao gồm của hội đồng vào một dự án cũ hơn khi được thêm (trái ngược với việc chỉ đặt các tệp theo 'lib')? Khi xây dựng gói, cấu trúc bổ sung này có được duy trì thủ công hay phiên bản .NET của assembly được phát hiện và sử dụng không? – brianary

+2

@brianary tôi tin rằng danh sách ở đây: https://docs.microsoft.com/en-us/nuget/schema/target-frameworks#supported-frameworks và liên kết này tài liệu đầy đủ hơn cấu trúc thư mục ở trên: https: // docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks –

+0

Ở đây, net40 hiển thị khuôn khổ mà File * .dll được xây dựng? HOẶC khuôn khổ của dự án mà bạn sẽ sử dụng/tham khảo các tập tin (File * .dll) dlls ?? – gmuhammad

9

Với phiên bản NuGet hiện tại của bài đăng này (và tôi giả sử các phiên bản sau), bạn có thể sử dụng tệp .csproj, song song với tệp .nuspec để tạo gói. Những gì chúng tôi đã làm là tạo một tệp .nuspec (sử dụng thông số nuget và sau đó tùy chỉnh nó) và đưa nó vào dự án.

Với tùy chỉnh.Tệp nuspec, chúng tôi đã sử dụng lệnh:

nuget pack sample.csproj -IncludeReferencedProjects 

Tại thời điểm đó, nó tạo ra .nupkg và không phát ra vấn đề. Tệp .nupkg hiển thị trong thư mục đầu ra bình thường (trong trường hợp mặc định của tôi, bin \ debug).

+1

Đây là câu trả lời không tốt. Với VS 2015 sử dụng nuget 3.3 và lệnh chính xác của bạn, tôi vẫn gặp lỗi này. – Mario

+0

Điều này làm việc cho tôi. Cảm ơn! –

0

Chúng vào thư mục "lib" bằng cách được đưa vào thư mục bin \ debug hoặc bin \ release của bạn trong .NET. Vì vậy, bạn cần phải có được biên dịch dự án để sao chép địa phương trên các DLL bên ngoài để nó bao gồm chúng trong thư mục bin trên biên dịch.

0

Tôi đã sử dụng giải pháp Prof Von Lemongargle 'và đối với tôi là một giải pháp tuyệt vời. Chú ý:

  1. Bao gồm file spec (với phải cấp nhấp chuột> Bao gồm trong dự án) trong dự án
  2. Give để spec tập tin cùng một filename của dự án của bạn (myproject.csproj, myproject.nuspec)

Công việc này hoàn hảo trong Visual Studio 2012.

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