ฉันเริ่มด้วยการอ่านคำถามที่แนะนำนี้คล้ายกับของฉัน แต่ไม่มีวิธีแก้ปัญหา: ทำไม 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.slnMainFramework.csprojClientLibrary.csproj->.nupkgสร้างจากสิ่งนี้
โครงการแยก:
TargetProject.slnTargetProject.csproj-> ติดตั้ง.nupkgลงบนสิ่งนี้
ClientLibraryมีการอ้างอิงถึงและใช้วิธีการมากมายจากMainFrameworkMainFramework
เมื่อติดตั้ง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เมื่อติดตั้งดังนั้นฉันสมมติว่าปัญหานี้เกิดจากการมีแพคเกจในปัจจุบันแต่ไม่ได้อยู่ในMainFrameworkClientLibrary
ฉันเชื่อว่าฉันสามารถ "แก้ไข" ปัญหานี้ได้โดยการติดตั้ง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.FrameworkUtilizes ขอบคุณสำหรับการวิเคราะห์
