2013-09-04 8 views
14

के साथ Nuget पैकेज पुनर्स्थापना मेरे पास एक प्रोजेक्ट है जहां मैं गिट से 2 submodules शामिल हैं। दोनों परियोजनाओं में "nuget पैकेज पुनर्स्थापना" सक्षम है, मूल परियोजना भी। दो में शामिल पैकेज फ़ोल्डर में submodules की जांच नहीं की गई है, चेक आउट परियोजनाओं में मौजूद नहीं है। पेरेंट प्रोजेक्ट का निर्माण करते समय Nuget सबफ़ोल्डर में संकुल को पुनर्स्थापित करने का प्रयास करता है लेकिन गलत पैकेज फ़ोल्डर में!गिट सबमिशन

"C:\Dev\git\oasisdb\odb_oasis_repository\ODB_OASIS_Repository\.nuget\NuGet.exe" install "C:\Dev\git\oasisdb\odb_oasis_repository\odb_oasis_rvm\ODB_OASIS_RVM_EF\ODB_OASIS_RVM_EF\packages.config" -source "" -NonInteractive -RequireConsent -solutionDir "C:\Dev\git\oasisdb\odb_oasis_repository\ODB_OASIS_Repository\ " 

डुबकी सबमिशन के समाधान डीआईआर में पुनर्स्थापित क्यों नहीं करता है?

धन्यवाद

+0

संभावित डुप्लिकेट [NuGet लापता संकुल नहीं मिल रहा] (http://stackoverflow.com/ques tions/17797052/nuget-not-getting-missing-packages) –

उत्तर

8
+1

कृपया "उत्तर" के रूप में चिह्नित करें, इसलिए यह उत्तर दिए गए ढेर में दिखाई नहीं देता है। धन्यवाद। – granadaCoder

+1

बिलकुल नहीं। एक लाइब्रेरी प्रोजेक्ट को उस होस्ट प्रोजेक्ट के बारे में विवरण जानने की आवश्यकता नहीं है जो इसका संदर्भ दे रहा है। -1। – Nuzzolilo

+0

क्या यह परिवर्तन NuGet के नवीनतम संस्करण में किया गया था? – SuperJMN

11

Nuget खोला समाधान निर्देशिका में पैकेज को बहाल किया गया है।

आप submodule परियोजना के .csproj संपादित कर सकते हैं और से पैकेज dll संदर्भ संशोधित:

<ItemGroup> 
    <Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
     <HintPath>..\packages\Microsoft.Rest.ClientRuntime.2.1.0\lib\net45\Microsoft.Rest.ClientRuntime.dll</HintPath> 
     <Private>True</Private> 
    </Reference> 

रहे हैं:

<ItemGroup> 
<Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>$(SolutionDir)\packages\Microsoft.Rest.ClientRuntime.2.1.0\lib\net45\Microsoft.Rest.ClientRuntime.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

आशा इस मदद!

+0

यदि आपको सबमिशन में प्रत्येक प्रोजेक्ट को संशोधित करना है, तो आप सबमिशन को प्रभावी ढंग से संशोधित कर रहे हैं, यह एक बड़ा नंबर है। जैसा कि @ नोजोलिलो नीचे बताता है, पुस्तकालय को उन परियोजनाओं के बारे में कुछ भी नहीं पता होना चाहिए जो इसका उपयोग कर रहे हैं। वे अज्ञेयवादी होना चाहिए। क्षमा करें, लेकिन यह एक वैध जवाब नहीं है। – SuperJMN

+0

हां निश्चित रूप से इसका उपयोग केवल तभी किया जाना चाहिए जब आप सबमिशन के स्वामी हों और जानें कि इस चाल के साथ क्या करना है। स्पष्टीकरण के लिए धन्यवाद – Srounsroun

0

यदि आप वीएस2015 अपडेट 1 या बाद में उपयोग कर रहे हैं, तो आप convert your project to use project.json to fix this कर सकते हैं।

संक्षेप में: अपने सभी संकुल के लिए

  • भागो Uninstall-Package <package name> -Force -RemoveDependencies। ऐसा करने से पहले आप नोटपैड में अपने packages.config को कॉपी-पेस्ट करना चाहेंगे।
  • परियोजना से packages.config हटाएँ, परियोजना को बचाने, उतारना
  • संपादित प्रोजेक्ट फाइल और निकालें: संबंधित शीर्ष पर
    • किसी भी संदर्भित .props फ़ाइलों
    • किसी भी <Reference> तत्वों एक पैकेज का संदर्भ लेने nuget को
    • -
    • तल पर .targets फ़ाइलों को nuget संदर्भ आमतौर पर के साथ शुरू होता: <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    • अपने संकुल रोसलिन विश्लेषक शामिल है तो मा उन्हें भी हटाने के लिए सुनिश्चित करें।
  • सहेजें फ़ाइल और परियोजना

साथ project.json जोड़े relod:

{ 
    "dependencies": { 
    }, 
    "frameworks": { 
    ".NETFramework,Version=v4.6.1": {} 
    }, 
    "runtimes": { 
    "win": {} 
    } 
} 

अंत में फिर से अपने संकुल dependencies के नीचे या Install-Package का उपयोग कर या में nuget यूआई के साथ, या तो हाथ से जोड़ने बनाम

मुझे अपनी परियोजनाओं से Microsoft.Bcl.* पैकेजों को भी हटा देना पड़ा क्योंकि वे स्पष्ट रूप से packages.config फ़ाइल ढूंढते हैं।

संपादित करें:। इस (Microsoft.Bcl.* संकुल को हटाने आप एक संकलन समय त्रुटि दे देंगे, भले ही परियोजना है, ठीक है का निर्माण करेगा क्योंकि .targets फ़ाइल Microsoft.Bcl.Build कहते हैं अभी भी packages.config के लिए दिखेगा

इस को दबाने के लिए, संपादन अपनी परियोजना फ़ाइल और जोड़ें:।

<SkipValidatePackageReferences>true</SkipValidatePackageReferences> 

यह एक Condition विशेषता सेट नहीं है कि पहली <PropertyGroup> जाने की जरूरत है अगर वहाँ नहीं है, तो बस ऊपर एक और जोड़ सकते हैं, जैसे:

<PropertyGroup> 
    <SkipValidatePackageReferences>true</SkipValidatePackageReferences> 
</PropertyGroup> 
1

आप सांकेतिक लिंक का उपयोग कर सकते हैं: nuget डाउनलोड करने के बाद सभी संकुल समाधान के packages निर्देशिका के लिए, प्रतीकात्मक कड़ी (नाम packages और लिंक समाधान स्तर packages निर्देशिका के लिए) submodule के रूट निर्देशिका में पैदा करते हैं। संक्षेप में - अपने स्टार्टअप परियोजना में जोड़ने के पूर्व बिल्ड घटना है कि अपने सभी submodules करने के लिए अपने समाधान packages निर्देशिका के बीच प्रतीकात्मक कड़ी बनाता है packages निर्देशिका:

SET sourceDir=$(SolutionDir)packages 
SET destDir=$(SolutionDir)..\..\submodules\saturn72\src\packages 

if not exist %sourceDir% mkdir %sourceDir% 

if not exist %destDir% mklink /j %destDir% %sourceDir% 

पूर्ण विवरण यहाँ:

इस बैच है Visual Studio Solution with Nuget git submodules

स्रोत कोड यहाँ है: SolutionWithGitSubmodulesAndNuget

की
संबंधित मुद्दे