ฉันเริ่มด้วยการอ่านคำถามที่แนะนำนี้คล้ายกับของฉัน แต่ไม่มีวิธีแก้ปัญหา: ทำไม MSTest.TestAdapter จึงเพิ่ม DLLs ลงในแพ็คเกจ NuGet ของฉัน
คำอธิบายปัญหาด่วน
ฉันเขียนแพคเกจ NuGet และทุกครั้งที่ฉันติดตั้งNUnit
และNUnit3TestAdapter
.dll
ได้รับการเพิ่มเข้าในโครงการที่ฉันติดตั้ง ฉันต้องการค้นหาวิธีแก้ไขปัญหานี้
ทำซ้ำขั้นตอน
ฉันผลักที่เก็บคอมไพล์สองแห่งเพื่อสร้างปัญหาที่ฉันกำลังอธิบาย
ClientLibrary
/ MainFramework
(โครงการที่ฉันสร้างแพ็คเกจ NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject
(โปรเจ็กต์นั้นต้องติดตั้งใน) - https://github.com/harbourc/target-project-repro-nuget-issue
คุณสามารถโคลนที่เก็บทั้งสองคืนค่าแพ็คเกจ NuGet และสร้างปัญหาดังต่อไปนี้:
ค้นหา ClientLibrary.1.0.0.nupkg ใน client-library-repro-nuget-issue / ClientLibrary /
เปิดคอนโซลตัวจัดการแพคเกจสำหรับเป้าหมายโครงการ repro-nuget-issue และเรียกใช้
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- จดบันทึก
NUnit
และNUnit3TestAdapter
.dll
ของที่ถูกเพิ่มเข้าไปTargetProject
- แม้ว่าจะTargetProject
มีNUnit
และNUnit3TestAdapter
ติดตั้งแล้วก็ตาม
ภาพรวมอีกต่อไป
ผมได้สร้างแพคเกจ NuGet ของตัวเองสำหรับการใช้ภายในเรียกว่าและฉันกำลังพยายามที่จะติดตั้งในโครงการอื่นที่จะเรียกว่าClientLibrary
TargetProject
นี่คือการแบ่งโครงสร้างอย่างรวดเร็ว:
FullSolution.sln
MainFramework.csproj
ClientLibrary.csproj
->.nupkg
สร้างจากสิ่งนี้
โครงการแยก:
TargetProject.sln
TargetProject.csproj
-> ติดตั้ง.nupkg
ลงบนสิ่งนี้
ClientLibrary
มีการอ้างอิงถึงและใช้วิธีการมากมายจากMainFramework
MainFramework
เมื่อติดตั้งClientLibrary.1.0.0.nupkg
ลงบนTargetProject
สิ่งต่อไปนี้.dll
จะถูกเพิ่มเข้าไปในTargetProject
:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
หากฉันลบสิ่งเหล่านี้.dll
ทุกอย่างจะทำงานได้ดีเพราะTargetProject
มีแพ็คเกจเหล่านั้นติดตั้งอยู่แล้ว พวกมันไม่จำเป็นมันน่ารำคาญที่จะต้องลบมันออกเมื่อทำการติดตั้ง
นี่คือวิธีที่ฉันเพิ่มClientLibrary
แพ็กเกจ NuGet ไปที่TargetProject
:
- สร้าง
ClientLibrary
และMainFramework
โครงการเพื่อสร้าง. dll ของพวกเขา - เปลี่ยนไดเรกทอรีเป็น
ClientLibrary
โฟลเดอร์และเรียกใช้nuget spec
.nuspec
ไฟล์ถูกสร้างขึ้น:
<?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>
เรียกใช้
nuget pack -IncludeReferencedProjects
- เนื่องจากClientLibrary
มีการพึ่งพาMainFramework
(และแพ็คเกจอื่น ๆ ที่ใช้โดยMainFramework
)นำทางไปยัง
TargetProject
เปิด Package Manager Console- วิ่ง
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
การติดตั้งทำงานได้สำเร็จและจากนั้น.dll
ฉันกำลังบ่นเกี่ยวกับการเพิ่ม
ปัญหา:
MainFramework
มีNUnit
และNUnit3TestAdapter
แพคเกจติดตั้ง NuGet ClientLibrary
ไม่. ดังนั้น.dll
's ดูเหมือนจะเพิ่มเพราะพวกเขาจะติดตั้งบนแต่ไม่ได้ติดตั้งMainFramework
ClientLibrary
(จำClientLibrary
ข้อมูลอ้างอิงMainFramework.dll
)
มีอื่น ๆแพคเกจติดตั้งได้ทั้งบนMainFramework
และClientLibrary
เหล่านี้ไม่ได้มีและ.dll
ของที่ได้รับการบันทึกTargetProject
เมื่อติดตั้งดังนั้นฉันสมมติว่าปัญหานี้เกิดจากการมีแพคเกจในปัจจุบันแต่ไม่ได้อยู่ในMainFramework
ClientLibrary
ฉันเชื่อว่าฉันสามารถ "แก้ไข" ปัญหานี้ได้โดยการติดตั้งNUnit
และNUnit3TestAdapter
เข้าสู่ระบบClientLibrary
แต่ClientLibrary
ไม่ได้ใช้แพ็คเกจเหล่านั้นเลย
ฉันจะติดตั้งClientLibrary
ลงTargetProject
โดยไม่รวมถึงNUnit
และNUnit3TestAdapter
.dll
ของและไม่ต้องติดตั้งNUnit
และNUnit3TestAdapter
ลงClientLibrary
? ถ้าเป็นไปได้ผมอยากจะบอกClientLibrary.1.0.0.nupkg
ให้ใช้NUnit
และNUnit3TestAdapter
แพคเกจที่มีอยู่แล้วTargetProject
ติดตั้งบน
หากคำตอบคือ "เป็นไปไม่ได้" นั่นเป็นเรื่องปกติ แต่ฉันต้องการคำอธิบาย - เป้าหมายโดยรวมของฉันสำหรับคำถามนี้คือการได้รับความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการทำงานของ NuGet และการพึ่งพาและเข้าใจว่าเหตุใดจึงเป็นปัญหาใน ที่แรก. ขอบคุณสำหรับการอ่าน.
ClientLibrary
ใช้เพียงบางส่วนของMainFramework
ดังนั้นMainFramework
แน่นอนสามารถแบ่งออกเป็นMainFramework.Framework
และMainFramework.Test
ที่NUnit
การอ้างอิงเท่านั้นอยู่ในMainFramework.Test
และClientLibrary
เพียง MainFramework.Framework
Utilizes ขอบคุณสำหรับการวิเคราะห์