मैंने अपने इसी सुझाए गए प्रश्न के माध्यम से पढ़ना शुरू कर दिया, लेकिन कोई संकल्प नहीं था: MSTest.TestAdapter अपने DLLs को मेरे NuGet पैकेज में क्यों जोड़ता है?
त्वरित समस्या का वर्णन
मैंने एक NuGet पैकेज लिखा है, और हर बार जब मैं इसे स्थापित करता हूं, NUnitऔर NUnit3TestAdapter .dllउस परियोजना में जोड़ा जाता हूं जिसे मैंने स्थापित किया था। मैं एक समाधान खोजना चाहता हूं जो इस मुद्दे को ठीक करता है।
रेप्रो स्टेप्स
मैंने दो git रिपॉजिटरी को धक्का दिया है जो उस समस्या का पुनरुत्पादन करता है जिसका मैं वर्णन कर रहा हूं।
ClientLibrary/ MainFramework(प्रोजेक्ट जिसमें से मैंने NuGet पैकेज बनाया है) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(प्रोजेक्ट जो पैकेज पर स्थापित किया जाना है) - https://github.com/harbourc/target-project-repro-nuget-issue
आप दोनों रिपॉजिटरी को क्लोन कर सकते हैं, उनके NuGet पैकेज को पुनर्स्थापित कर सकते हैं, और समस्या को निम्नानुसार पुन: उत्पन्न कर सकते हैं:
क्लाइंट-लायब्रेरी -.0.0.nupkg को क्लाइंट-लाइब्रेरी-रिप्रो-नगेट-इश्यू / क्लाइंट-लाइन्स में खोजें
लक्ष्य-प्रोजेक्ट-रिप्रो-नगेट-इश्यू और रन के लिए ओपन पैकेज मैनेजर कंसोल
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के पास एक संदर्भ है 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पहले से ही उन पैकेजों को वैसे भी स्थापित किया गया है। वे आवश्यक नहीं हैं, स्थापित करते समय उन्हें हटाना ही कष्टप्रद है।
यहाँ मैं ClientLibraryNuGet पैकेज को कैसे जोड़ रहा हूँ 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पैकेज प्रबंधक कंसोल खोलें, पर नेविगेट करें- Daud
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
स्थापना सफलतापूर्वक चलती है, और फिर .dllमैं उन लोगों के बारे में शिकायत कर रहा हूं जो जोड़े जाने की शिकायत कर रहे हैं।
मुसीबत:
MainFrameworkहै NUnitऔर NUnit3TestAdapterNuGet संकुल स्थापित है। ClientLibrary नहीं करता। इसलिए, .dllवे जोड़े जा रहे हैं क्योंकि वे स्थापित हैं MainFramework, लेकिन स्थापित नहीं हैं ClientLibrary। (याद रखें, ClientLibraryसंदर्भ MainFramework.dll।)
दोनों पर और स्थापित किए गए अन्य पैकेज हैं , और इनमें इंस्टॉलेशन के लिए जोड़ा नहीं जाता है, इसलिए मैं मान रहा हूं कि पैकेज मौजूद होने के कारण समस्या है, लेकिन अंदर नहीं है ।MainFrameworkClientLibrary.dllTargetProjectMainFrameworkClientLibrary
मेरा मानना है कि मैं इस मुद्दे को स्थापित करके NUnitऔर उस NUnit3TestAdapterपर "ठीक" कर सकता हूं ClientLibrary, लेकिन ClientLibraryवास्तव में उन पैकेजों का उपयोग नहीं करता है, इसलिए यह अनावश्यक लगता है।
मैं कैसे स्थापित कर सकते हैं ClientLibraryपर TargetProjectशामिल किए बिना NUnitऔर NUnit3TestAdapter .dllके, और इंस्टॉल किए बिना, NUnitऔर NUnit3TestAdapterपर ClientLibrary? यदि संभव हो तो, मैं पहले से ही स्थापित किए गए और पैकेज ClientLibrary.1.0.0.nupkgका उपयोग करना बताना चाहूंगा ।NUnitNUnit3TestAdapterTargetProject
यदि उत्तर "संभव नहीं है", यह ठीक है, लेकिन मैं एक स्पष्टीकरण चाहूंगा - इस प्रश्न के लिए मेरा समग्र लक्ष्य यह है कि नूगेट और निर्भरताएं कैसे काम करती हैं, इसकी बेहतर समझ हासिल करें और समझें कि यह क्यों एक मुद्दा रहा है पहले स्थान पर। पढ़ने के लिए धन्यवाद।
ClientLibraryकेवल के कुछ हिस्सों का उपयोग करता है MainFramework, इसलिए MainFrameworkनिश्चित रूप से विभाजित किया जा सकता है MainFramework.Frameworkऔर MainFramework.Test, जहां NUnitनिर्भरता केवल में मौजूद है MainFramework.Test, और ClientLibraryकेवल उपयोग करता है MainFramework.Framework। विश्लेषण के लिए धन्यवाद।
