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ó NUnit
và NUnit3TestAdapter
.dll
tô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 ý
NUnit
vàNUnit3TestAdapter
.dll
được thêm vàoTargetProject
- ngay cả khiTargetProject
đã cóNUnit
và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 ClientLibrary
và 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.sln
MainFramework.csproj
ClientLibrary.csproj
->.nupkg
được tạo từ này
Dự án riêng:
TargetProject.sln
TargetProject.csproj
-> cài đặt.nupkg
vào đây
ClientLibrary
có một tài liệu tham khảo MainFramework
và sử dụng nhiều phương pháp từ MainFramework
.
Khi cài đặt ClientLibrary.1.0.0.nupkg
lên TargetProject
, các mục sau .dll
sẽ đượ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ì TargetProject
dù 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 ClientLibrary
gói NuGet vào TargetProject
:
- Xây dựng
ClientLibrary
vàMainFramework
các dự án để tạo ra các dll của họ - Thay đổi thư
ClientLibrary
mụ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ìClientLibrary
có 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 đó .dll
tôi đang phàn nàn về việc được thêm vào.
Vấn đề:
MainFramework
đã cài đặt NUnit
và NUnit3TestAdapter
các gói NuGet. ClientLibrary
không làm. Vì vậy, .dll
dườ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ớ, ClientLibrary
tham khảo MainFramework.dll
.)
Có các gói khác được cài đặt trên cả hai MainFramework
và ClientLibrary
, và các gói này không .dll
được thêm vào TargetProject
khi cài đặt, vì vậy tôi cho rằng vấn đề là do có các gói có trong MainFramework
như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 NUnit
và tải NUnit3TestAdapter
lên ClientLibrary
, nhưng ClientLibrary
thự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 ClientLibrary
vào TargetProject
mà không bao gồm các NUnit
và NUnit3TestAdapter
.dll
's, và không cần phải cài đặt NUnit
và NUnit3TestAdapter
lên ClientLibrary
? Nếu có thể, tôi muốn nói ClientLibrary.1.0.0.nupkg
để sử dụng NUnit
và NUnit3TestAdapter
cá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.
ClientLibrary
chỉ sử dụng một số phần của MainFramework
, vì vậy MainFramework
chắc chắn có thể được chia thành MainFramework.Framework
và MainFramework.Test
, nơi mà các NUnit
phụ thuộc chỉ tồn tại MainFramework.Test
và ClientLibrary
chỉ sử dụng MainFramework.Framework
. Cảm ơn đã phân tích.