क्या मैं NuGet पैकेज स्थापित करते समय इन .dll को जोड़ने के आसपास काम कर सकता हूं?


10

मैंने अपने इसी सुझाए गए प्रश्न के माध्यम से पढ़ना शुरू कर दिया, लेकिन कोई संकल्प नहीं था: 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 पैकेज को पुनर्स्थापित कर सकते हैं, और समस्या को निम्नानुसार पुन: उत्पन्न कर सकते हैं:

  1. क्लाइंट-लायब्रेरी -.0.0.nupkg को क्लाइंट-लाइब्रेरी-रिप्रो-नगेट-इश्यू / क्लाइंट-लाइन्स में खोजें

  2. लक्ष्य-प्रोजेक्ट-रिप्रो-नगेट-इश्यू और रन के लिए ओपन पैकेज मैनेजर कंसोल

Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
  1. नोट 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पहले से ही उन पैकेजों को वैसे भी स्थापित किया गया है। वे आवश्यक नहीं हैं, स्थापित करते समय उन्हें हटाना ही कष्टप्रद है।

यहाँ मैं ClientLibraryNuGet पैकेज को कैसे जोड़ रहा हूँ TargetProject:

  1. निर्माण ClientLibraryऔर MainFrameworkउनके .dll उत्पन्न करने के लिए परियोजनाओं
  2. निर्देशिका को 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>
  1. रन nuget pack -IncludeReferencedProjects- क्योंकि ClientLibraryएक निर्भरता है MainFramework(और कई अन्य पैकेजों का उपयोग किया जाता है MainFramework)

  2. TargetProjectपैकेज प्रबंधक कंसोल खोलें, पर नेविगेट करें

  3. 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

यदि उत्तर "संभव नहीं है", यह ठीक है, लेकिन मैं एक स्पष्टीकरण चाहूंगा - इस प्रश्न के लिए मेरा समग्र लक्ष्य यह है कि नूगेट और निर्भरताएं कैसे काम करती हैं, इसकी बेहतर समझ हासिल करें और समझें कि यह क्यों एक मुद्दा रहा है पहले स्थान पर। पढ़ने के लिए धन्यवाद।


1
आपको व्यवहार को चित्रित करने के लिए नमूना परियोजनाएं प्रदान करनी होंगी।
लेक्स ली

@LexLi मैंने अपने प्रोजेक्ट विवरण को दो सैंपल रिपॉजिटरी के साथ अद्यतन किया है जो कि रीप्रो चरणों के साथ, व्यवहार को चित्रित करता है।
क्रिस्टीन

3
कोड MainFramework.csproj में NUnit निर्भरता रखने के लिए एक खराब aproach दिखाता है। क्या आप उन्हें एक अलग इकाई परीक्षण परियोजना में ले जा सकते हैं, जैसे कि MainFramework.UnitTest.csproj?
लेक्स ली

यह समझ में आता है - ClientLibraryकेवल के कुछ हिस्सों का उपयोग करता है MainFramework, इसलिए MainFrameworkनिश्चित रूप से विभाजित किया जा सकता है MainFramework.Frameworkऔर MainFramework.Test, जहां NUnitनिर्भरता केवल में मौजूद है MainFramework.Test, और ClientLibraryकेवल उपयोग करता है MainFramework.Framework। विश्लेषण के लिए धन्यवाद।
क्रिस्टीन

जवाबों:


7

सामान्य तौर पर, अपने सभी परीक्षणों और इसी NuGet पैकेज को अपने प्रोजेक्ट में रखने के लिए यह सबसे अच्छा अभ्यास है। फिर सुनिश्चित करें कि कोई भी परियोजना परीक्षण परियोजना को संदर्भित नहीं करती है।

यहां छवि विवरण दर्ज करें

क्लाइंट लाइब्रेरी में संदर्भ नहीं होने पर , क्लाइंट लाइब्रेरी में NUnit dll शामिल होंगे।

जबकि डू ओर, क्लाइंट लाइब्रेरी में NUnit dll शामिल नहीं होगा क्योंकि न तो परीक्षण परियोजना को संदर्भित करता है।


2
ब्रेकडाउन और स्पष्टीकरण के लिए धन्यवाद - मैंने आपके और मेरे अन्य उपयोगकर्ता द्वारा सुझाए गए प्रोजेक्ट को विभाजित करके इस अभ्यास को लागू किया। यह महसूस करता है कि मैं पहले जो कर रहा था, उससे कहीं ज्यादा बेहतर अभ्यास है, और मेरा मुद्दा भी हल हो गया है।
क्रिस्टीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.