2016-05-17 32 views
5

Tôi đã tạo gói NuGet libtidy được đẩy vào nguồn cấp dữ liệu của Nhóm Dịch vụ.Không thể thêm gói NuGet

Khi tôi cố gắng cài đặt thông qua NuGet console tôi nhận được lỗi

Không thêm tài liệu tham khảo để 'libtidy'

Tôi đã đọc Stack Overflow post này, nơi OP có một vấn đề tương tự nhưng tôi đã không thể giải quyết vấn đề - Tôi đã thử:

  • Xóa tất cả các thư mục bên trong thư mục gói và cập nhật
  • Thi regsvr32 "C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VsLangproj.olb" từ một lệnh nâng lên nhanh chóng
  • Làm Uninstall-Package libtidy -force từ người quản lý gói giao diện điều khiển (điều này không làm việc như các gói không được cài đặt
  • git clean -dfx
  • thanh toán bù trừ NuGet bộ nhớ cache
  • bằng tay loại bỏ các thư mục libtidy trong thư mục .nuget

EDIT

Có thực hiện một nghiên cứu nhỏ, điều này có thể được thực hiện với thực tế là libtidy.dll không được quản lý mã? Infact nó là ANSI-C. Trong ứng dụng của chúng tôi, chúng tôi đang sử dụng TidyManaged, như một trình bao bọc, được quản lý và được cài đặt thành công qua nuget. Hiện tại nếu chúng ta sao chép thủ công libtidy.dll vào thùng, nó hoạt động tốt, nhưng sẽ tốt hơn nếu quá trình xây dựng được kéo vào libtidy.dll, có lẽ là một phần của bản cài đặt Tidymanaged, mà hiện tại nó không có.

EDIT2

param($installPath, $toolsPath, $package, $project) 

$file = $project.ProjectItems.Item("libtidy.dll"); 

If ($file -eq $null) 
{ 
    $project.ProjectItems.AddFromFile("libtidy.dll"); 
    $file = $project.ProjectItems.Item("libtidy.dll"); 
} 

$file.Properties.Item("CopyToOutputDirectory").Value = [int]1; 

EDIT3

Sửa 3:

Tôi

a) đặt libtidy.dllInstall.ps1 trong một thư mục gọi là nuget-libtidy trong manifest được tạo ra bởi nuget spec

tôi có:

<?xml version="1.0"?> 
<package > 
    <metadata> 
    <id>nuget-libtidy</id> 
    <version>1.0.0</version> 
    <authors>Name</authors> 
    <owners>Name</owners> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>nuget-libtidy</description> 
    <copyright>Copyright 2016</copyright> 
    <tags>nuget-libtidy</tags> 
    </metadata> 
    <files> 
     <file src="libtidy.dll" target="content" /> 
     <file src="Install.ps1" target="tools" /> 
    </files> 
</package> 

Khi tôi chạy nuget pack tôi nhận được cảnh báo sau đây:

WARNING: 1 issue(s) found with package 'nuget-libtidy2'. 

Issue: Assembly outside lib folder. 
Description: The assembly 'content\libtidy.dll' is not inside the 'lib' folder and hence it won't be added as reference when the package is installed into a project. 
Solution: Move it into the 'lib' folder if it should be referenced. 

b) Khi chúng ta xây dựng ứng dụng libtidy.dll được đặt trong thư mục gốc của dự án (không phải là thùng rác) & nhận được lỗi sau trong cửa sổ đầu ra:

Added package 'nuget-libtidy' to 'packages.config' 
Executing script file <path>\nuget-libtidy\tools\Install.ps1'... 
Cannot add a link to the file libtidy.dll. There is already a file of the same name in this folder. 
At <path>\nuget-libtidy\tools\Install.ps1:7 char:5 
+  $project.ProjectItems.AddFromFile("libtidy.dll"); 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : OperationStopped: (:) [], COMException 
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException 

Successfully installed 'nuget-libtidy' to <Namepace> 
+0

vui lòng cung cấp vs bạn phiên bản và gói dịch vụ là gì? – toha

Trả lời

4

Bạn có lẽ việc này

Không thêm tài liệu tham khảo để 'libtidy'

bởi vì bạn có libtidy ở đâu đó bên trong thư mục lib. Cài đặt một gói trong thư mục này sẽ tự động có một tham chiếu được thêm vào nó, và bạn không thể thêm một tham chiếu đến một thư viện không được quản lý trực tiếp.

Nếu bạn chưa sẵn sàng, bạn nên xem xét việc tạo gói nuget theo cách thủ công thay vì thực hiện theo dự án hoặc lắp ráp. Để làm điều này:

  1. Tạo một thư mục có tên NuGet-libtidy
  2. Thêm libtidy.dll, TidyManaged.dll và bất cứ điều gì khác mà bạn cần vào thư mục này
  3. mở cmd và điều hướng đến thư mục mà bạn vừa tạo
  4. Run nuget spec để tạo ra mặc định manifest Package.nuspec (bạn sẽ cần phải có NuGet bổ sung vào môi trường PATH bạn biến
  5. Thêm xml sau vào file nuspec vừa tạo ngay sau khi các </metadata> thẻ đóng

    <files> 
        <file src="libtidy.dll" target="content" /> 
        <file src="TidyManaged.dll" target="lib" /> 
    </files> 
    
  6. Điều chỉnh bất kỳ giá trị nào khác bạn cần.

Bạn có thể gọi nó được thực hiện và đóng gói và triển khai gói nuget. Bạn cần libtidy.dll để được sao chép vào thư mục đầu ra. Điều này có nghĩa là sau khi bạn cài đặt gói, bạn sẽ phải điều hướng đến nhấp chuột phải vào phụ thuộc \ libtidy.dll trong studio trực quan, chọn thuộc tính và đặt Copy to Output Directory thành Copy Always.

Nếu bạn không muốn mọi người phải làm điều này, bạn có thể thực hiện thêm một vài điều chỉnh cho bạn thư mục nuget-libtidy và tệp kê khai. Về cơ bản bạn cần làm là tạo tệp Install.ps1 để thêm

<ItemGroup> 
    <Content Include="libtidy.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

vào tệp dự án của dự án đã cài đặt.

Dưới đây là một ví dụ về Install.ps1 rằng nên làm những gì bạn muốn:

param($installPath, $toolsPath, $package, $project) 

$file = $project.ProjectItems.Item("libtidy.dll"); 

If ($file -eq $null) 
{ 
    $project.ProjectItems.AddFromFile("libtidy.dll"); 
    $file = $project.ProjectItems.Item("libtidy.dll"); 
} 

$file.Properties.Item("CopyToOutputDirectory").Value = [int]1; 

Khi kịch bản PowerShell bạn được thực hiện thêm một dòng khác cho bạn file manifest:

<file src="Install.ps1" target="tools" /> 

Đừng quên chạy các tập lệnh trên Windows 10 yêu cầu bạn phải đặt chính sách thực thi. Tôi sẽ đề nghị chạy Set-ExecutionPolicy RemoteSigned. Sau khi bạn chạy điều này trong PowerShell, bạn sẽ phải khởi động lại hệ thống của bạn.

Tại thời điểm này, bạn sẽ có thể đóng gói và triển khai.

EDIT

Tìm thấy tệp trong tệp Install.ps1.Dòng 3, $file1 = $project.ProjectItems.Item("libtidy.dll"); nên $file = $project.ProjectItems.Item("libtidy.dll";

+0

Cảm ơn bạn đã trả lời rất toàn diện này. Sẽ thử nó. – SamJolly

+0

Chúng tôi đã phát hiện ra rằng nó được sao chép "libtidy.dll" vào thư mục gốc chứ không phải vào thư mục "bin". Bất kỳ ý tưởng? – SamJolly

+0

File install.ps1 mà đi trong gói dưới thư mục cụ nên đã đặt ra để sao chép các tập tin vào thùng trên từng xây dựng. bạn có thể kiểm tra các thuộc tính cho libtidy.dll và cho tôi biết những gì giá trị là cho 'bản sao vào thư mục đầu ra' –

0

Tôi đã từng gặp vấn đề tương tự khi tôi phải chạy VS với sự cho phép nâng cấp để cài đặt gói nuget. Một cái gì đó để làm với các thiết lập bảo mật của công ty chúng tôi.

+0

Cảm ơn bạn đã đóng góp .. – SamJolly

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