Tôi đã bắt đầu bằng cách đọc qua câu hỏi gợi ý này tương tự câu hỏi của tôi, nhưng không có giải pháp: Tại sao MSTest.TestAd CHƯƠNG lại thêm DLL của nó vào gói NuGet của tôi?
Mô tả sự cố nhanh
Tôi đã viết một gói NuGet và mỗi lần tôi cài đặt nó NUnitvà NUnit3TestAdapter .dlltôi sẽ được thêm vào dự án mà tôi đã cài đặt. Tôi muốn tìm một giải pháp khắc phục vấn đề này.
Bước repro
Tôi đã đẩy hai kho git tái tạo vấn đề mà tôi đang mô tả.
ClientLibrary/ MainFramework(dự án mà tôi đã tạo gói NuGet) - https://github.com/harbourc/client-l Library-repro-nuget- phát hành
TargetProject(dự án gói đó sẽ được cài đặt vào) - https://github.com/harbourc/target-project-repro-nuget- phát hành
Bạn có thể sao chép cả hai kho lưu trữ, khôi phục các gói NuGet của chúng và tái tạo vấn đề như sau:
Xác định vị trí ClientL Library.1.0.0.nupkg trong client-library-repro-nuget-vấn đề / ClientL Library /
Mở bảng điều khiển quản lý gói cho vấn đề mục tiêu-dự án-repro-nuget và chạy
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Lưu ý
NUnitvàNUnit3TestAdapter.dllđược thêm vàoTargetProject- ngay cả khiTargetProjectđã cóNUnitvàNUnit3TestAdapterđược cài đặt.
Tổng quan dài hơn
Tôi đã tạo gói NuGet của riêng mình để sử dụng nội bộ, được gọi ClientLibraryvà tôi đang cố gắng cài đặt nó vào một dự án khác, được gọi TargetProject. Đây là một sự cố nhanh chóng của cấu trúc:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkgđược tạo từ này
Dự án riêng:
TargetProject.slnTargetProject.csproj-> cài đặt.nupkgvào đây
ClientLibrarycó một tài liệu tham khảo MainFrameworkvà sử dụng nhiều phương pháp từ MainFramework.
Khi cài đặt ClientLibrary.1.0.0.nupkglên TargetProject, các mục sau .dllsẽ được thêm vào TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Nếu tôi xóa chúng .dll, mọi thứ sẽ hoạt động tốt, vì TargetProjectdù sao cũng đã cài đặt các gói đó. Chúng không cần thiết, thật khó chịu khi phải xóa chúng khi cài đặt.
Đây là cách tôi thêm ClientLibrarygói NuGet vào TargetProject:
- Xây dựng
ClientLibraryvàMainFrameworkcác dự án để tạo ra các dll của họ - Thay đổi thư
ClientLibrarymục vào thư mục và chạynuget spec
.nuspec tập tin được tạo ra:
<?xml version="1.0"?>
<package >
<metadata>
<id>ClientLibrary</id>
<version>1.0</version>
<title>Client Library</title>
<authors>Myself</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Client library for interacting with my application.</description>
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
</package>
Chạy
nuget pack -IncludeReferencedProjects- VìClientLibrarycó sự phụ thuộc vàoMainFramework(và một số gói khác được sử dụng bởiMainFramework)Điều hướng đến
TargetProject, mở Bảng điều khiển quản lý gói- Chạy
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
Cài đặt chạy thành công, và sau đó .dlltôi đang phàn nàn về việc được thêm vào.
Vấn đề:
MainFrameworkđã cài đặt NUnitvà NUnit3TestAdaptercác gói NuGet. ClientLibrary không làm. Vì vậy, .dlldường như được thêm vào vì chúng được cài đặt trên MainFramework, nhưng KHÔNG được cài đặt trên ClientLibrary. (Hãy nhớ, ClientLibrarytham khảo MainFramework.dll.)
Có các gói khác được cài đặt trên cả hai MainFrameworkvà ClientLibrary, và các gói này không .dllđược thêm vào TargetProjectkhi cài đặt, vì vậy tôi cho rằng vấn đề là do có các gói có trong MainFrameworknhưng KHÔNG có ClientLibrary.
Tôi tin rằng tôi có thể "khắc phục" sự cố này bằng cách cài đặt NUnitvà tải NUnit3TestAdapterlên ClientLibrary, nhưng ClientLibrarythực tế không sử dụng các gói đó, vì vậy có vẻ như không cần thiết.
Làm thế nào tôi có thể cài đặt ClientLibraryvào TargetProjectmà không bao gồm các NUnitvà NUnit3TestAdapter .dll's, và không cần phải cài đặt NUnitvà NUnit3TestAdapterlên ClientLibrary? Nếu có thể, tôi muốn nói ClientLibrary.1.0.0.nupkgđể sử dụng NUnitvà NUnit3TestAdaptercác gói đã được cài đặt trên TargetProject.
Nếu câu trả lời là "Không thể", điều đó tốt, nhưng tôi muốn một lời giải thích - mục tiêu chung của tôi cho câu hỏi này là để hiểu rõ hơn về cách thức hoạt động của NuGet và phụ thuộc và hiểu tại sao điều này lại là một vấn đề trong địa điểm đầu tiên. Cảm ơn bạn đã đọc.
ClientLibrarychỉ sử dụng một số phần của MainFramework, vì vậy MainFrameworkchắc chắn có thể được chia thành MainFramework.Frameworkvà MainFramework.Test, nơi mà các NUnitphụ thuộc chỉ tồn tại MainFramework.Testvà ClientLibrarychỉ sử dụng MainFramework.Framework. Cảm ơn đã phân tích.
