मैंने अपने इसी सुझाए गए प्रश्न के माध्यम से पढ़ना शुरू कर दिया, लेकिन कोई संकल्प नहीं था: 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.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
पैकेज प्रबंधक कंसोल खोलें, पर नेविगेट करें- Daud
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
स्थापना सफलतापूर्वक चलती है, और फिर .dll
मैं उन लोगों के बारे में शिकायत कर रहा हूं जो जोड़े जाने की शिकायत कर रहे हैं।
मुसीबत:
MainFramework
है NUnit
और NUnit3TestAdapter
NuGet संकुल स्थापित है। ClientLibrary
नहीं करता। इसलिए, .dll
वे जोड़े जा रहे हैं क्योंकि वे स्थापित हैं 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
यदि उत्तर "संभव नहीं है", यह ठीक है, लेकिन मैं एक स्पष्टीकरण चाहूंगा - इस प्रश्न के लिए मेरा समग्र लक्ष्य यह है कि नूगेट और निर्भरताएं कैसे काम करती हैं, इसकी बेहतर समझ हासिल करें और समझें कि यह क्यों एक मुद्दा रहा है पहले स्थान पर। पढ़ने के लिए धन्यवाद।
ClientLibrary
केवल के कुछ हिस्सों का उपयोग करता है MainFramework
, इसलिए MainFramework
निश्चित रूप से विभाजित किया जा सकता है MainFramework.Framework
और MainFramework.Test
, जहां NUnit
निर्भरता केवल में मौजूद है MainFramework.Test
, और ClientLibrary
केवल उपयोग करता है MainFramework.Framework
। विश्लेषण के लिए धन्यवाद।