दिलचस्प पोस्ट
SQL सर्वर सबक्व्री 1 से अधिक मूल्य लौटाया जब subquery = =,! =, <, <=,>,> = के बाद यह अनुमति नहीं है जीआईटी की शाखाओं में गिट टैग कैसे अलग हैं? एच 264 वीडियो स्ट्रीम के आयामों को प्राप्त करना ExpressJS कैसे एक आवेदन की संरचना? ऑटो एक्स {3} एक initializer_list निकाल क्यों करता है? जांचें कि क्या PHP सत्र पहले से शुरू हो चुका है आईओएस: ओपन सोर्स वीओआईपी / एसआईपी उद्देश्य-सी कोड iPhone ऐप मिनस ऐप स्टोर? मैं वर्डप्रेस में एक सरल jQuery स्क्रिप्ट कैसे जोड़ूं? कैसे दो java.lang.Numbers जोड़ने के लिए? अजगर फिर से मॉड्यूल समर्थन शब्द सीमाएं (\ b) करता है? आरजीबी रंग की चमक निर्धारित करने के लिए फॉर्मूला जब संदर्भ (एल मूल्य और आर-मान) पास-बाय-वैल्यू को पसंद किया जाता है तो पास से ओवरलोड हो रहा है? यह कैसे बताने के लिए कि एक बिंदु एक पंक्ति के दाईं ओर या बाईं तरफ है कितने सॉकेट कनेक्शन संभव हैं?

सामग्री फ़ाइलों को "प्रतिलिपि स्थानीय: हमेशा" के लिए एक नूगेट पैकेज में सेट करें

मैं पोस्ट-बिल्ड इवेंट में इस कमांड के साथ एक प्रोजेक्ट से नूगेट पैकेज उत्पन्न करता हूं। चर %conf% सही कॉन्फ़िगरेशन (डिबग या रिलीज) पर सेट है और %1 परियोजना का नाम है (जैसे "मायकॉम्पनी। मायप्रोजेक्ट")।

 nuget pack -Prop Configuration=%conf% "%1.csproj" -exclude *.sql -IncludeReferencedProjects 

यह पैकेज हमारे अपने ही उपयोग के लिए है, यह कभी नयूज पर प्रकाशित नहीं किया जाएगा यह हमारे निजी भंडार में समाप्त होता है

परियोजना में, एक ऐसी फाइल है जो generate action : content करने के लिए निर्धारित है generate action : content और copy local : always (मेरा दृश्य स्टूडियो फ्रेंच में है, इसलिए मैं परंपरा के बारे में 100% सुनिश्चित नहीं हूं)। चलिए इसे importantfile.xml फ़ाइल नाम दें। importantfile.xml

उत्पन्न पैकेज में, मैं इस संरचना के साथ समाप्त होता है:

 - content - importantfile.xml - lib -net45 (.NetFramework,Version=v4.5) -MyCompany.MyProject.dll 

जो ठीक है, मुझे पैकेज में तैनात किए जाने वाले महत्वपूर्ण फ़ाइल। Xml चाहिए, क्योंकि, यह फ़ाइल महत्वपूर्ण है!

जब मैं किसी अन्य प्रोजेक्ट में पैकेज स्थापित करता हूं, तो importantfile.xml फाईल। XML प्रोजेक्ट की जड़ में तैनात है। ठीक है। लेकिन यह copy local : always लिए सेट नहीं है copy local : always

मुझे copy local : always लिए importantfile.xml की आवश्यकता है copy local : always इस प्रोजेक्ट में जहां मैं अपना पैकेज स्थापित कर रहा हूं।

मैं उसे कैसे प्राप्त कर सकता हूं?

टिप्पणियाँ :

मैं copy local : always सेट कर सकता हूँ copy local : always पैकेज पर स्थापित करने के बाद फ़ाइल पर, यह कोई बड़ा सौदा नहीं है मैं इसके साथ रहूंगा अगर पैकेज के बाद के अपडेट को इस संपत्ति को देना होगा, जो मामला नहीं है। पैकेज को अद्यतन करते समय, copy local को रीसेट किया जाता है (जैसा कि यहां बताया गया है )।

परियोजना के फ़ोल्डर में एक nuspec फ़ाइल है, यहां यह है:

 <?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <copyright>Copyright 2014</copyright> <tags>some random tags</tags> </metadata> </package> 

वेब के समाधान से एकत्रित समाधान "सामग्री फ़ाइलों को "प्रतिलिपि स्थानीय: हमेशा" के लिए एक नूगेट पैकेज में सेट करें"

आप पावरशेल और Install.ps1 हुक को NuGet द्वारा प्रदान कर सकते हैं।

दस्तावेज़ीकरण देखें।

PowerShell के माध्यम से आपको सामग्री तत्व के लिए 'खोज' करना होगा जिसमें एक विशेषता में आपके importantfile.xml फ़ाइल। Xml शामिल होता है। जब स्क्रिप्ट को मिला, तो उसे <CopyToOutputDirectory>Always</CopyToOutputDirectory> को एक बाल तत्व के रूप में <CopyToOutputDirectory>Always</CopyToOutputDirectory>

  <Content Include="importantfile.xml"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> 

आप यहां कुछ पावरशेल स्निपेट पा सकते हैं। बस .ps1 फ़ाइलों को देखें।

आप निम्न का परीक्षण कर सकते हैं (परीक्षण नहीं) फ़ाइल को नाम दिया जाना चाहिए Install.ps1 और tools फ़ोल्डर में कॉपी किया गया है:

 param($installPath, $toolsPath, $package, $project) # Load project XML. $doc = New-Object System.Xml.XmlDocument $doc.Load($project.FullName) $namespace = 'http://schemas.microsoft.com/developer/msbuild/2003' # Find the node containing the file. The tag "Content" may be replace by "None" depending of the case, check your .csproj file. $xmlNode = Select-Xml "//msb:Project/msb:ItemGroup/msb:Content[@Include='importantfile.xml']" $doc -Namespace @{msb = $namespace} #check if the node exists. if($xmlNode -ne $null) { $nodeName = "CopyToOutputDirectory" #Check if the property already exists, just in case. $property = $xmlNode.Node.SelectSingleNode($nodeName) if($property -eq $null) { $property = $doc.CreateElement($nodeName, $namespace) $property.AppendChild($doc.CreateTextNode("Always")) $xmlNode.Node.AppendChild($property) # Save changes. $doc.Save($project.FullName) } } 

आपको यह भी जांचना चाहिए कि पैकेज को अनइंस्टॉल करते समय सब कुछ पूरी तरह से हटा दिया गया है या नहीं।

Jonhhy5 द्वारा नोट

update-package पैकेज के माध्यम से पैकेज को update-package , दृश्य स्टूडियो चेतावनी देता है कि प्रोजेक्ट को "वातावरण के बाहर" संशोधित किया गया है। यह $doc.Save($project.FullName) के कारण है। अगर मैं पूरी तरह समाप्त होने से पहले पुनः लोड पर क्लिक करता हूं, तो कभी-कभी त्रुटियों का कारण बनता है यह चाल प्रक्रिया समाप्त होने तक संवाद छोड़ना है, और फिर परियोजनाओं को पुनः लोड करना है

एक PowerShell स्क्रिप्ट का उपयोग करने के बजाय एक और तरीका है कि एक MSBuild लक्ष्य या प्रॉप्स फ़ाइल को समान नाम के साथ पैकेज आईडी के रूप में उपयोग करें:

 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <None Include="$(MSBuildThisFileDirectory)importantfile.xml"> <Link>importantfile.xml</Link> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup> </Project> 

अब nuspec फ़ाइल में, आवश्यक निर्देशिका को Content निर्देशिका में जोड़ने के बजाय, उसे लक्ष्य निर्देशिका के साथ Build निर्देशिका में जोड़ें।

  • निर्माण
    • importantfile.xml
    • MyPackage.targets
  • lib
    • net45
      • MyAssembly.dll

यदि आपको अलग-अलग आर्किटेक्चर के लिए अलग-अलग सामग्री की आवश्यकता होती है, तो आप अपने स्वयं के लक्ष्य फ़ाइल के साथ भी प्रत्येक के Build तहत आर्किटेक्चर फ़ोल्डर जोड़ सकते हैं।

NuGet Content निर्देशिका के साथ PowerShell स्क्रिप्ट पर एक लक्ष्य फ़ाइल का उपयोग करने के लिए लाभ:

  • आवश्यक सामग्री फ़ाइलों को दृश्य स्टूडियो में प्रोजेक्ट में नहीं दिखाया गया है
  • सामग्री फ़ाइलों को प्रत्येक प्रोजेक्ट की निर्देशिका में प्रतिलिपि करने के बजाय लिंक किया जाता है जो NuGet पैकेज का संदर्भ देता है (एकाधिक प्रतिलिपि को रोकना और नूगाकेट संकुल से असेंबलियों / पुस्तकालयों के समान व्यवहार रखने से)
  • PowerShell स्क्रिप्ट केवल Visual Studio में काम करते हैं और जब NuGet को कमांडलाइन (बिल्ड सर्वर, अन्य आईडीई और अन्य ओएस) से चलाया जाता है , तो यह दृष्टिकोण हर जगह काम करेगा
  • पॉवरशेल इंस्टाल स्क्रिप्ट NuGet 3.x project.json सिस्टम में समर्थित नहीं हैं।

इसलिए मुझे पता है कि आपको लोगों को इस पर काम करने का समाधान मिला है लेकिन यह मेरे लिए काम नहीं कर रहा है इसलिए मैं इसे साझा करने जा रहा हूं जो मैंने एनओएलॉग । कॉन्फिग नूगेट पैकेज इंस्टॉलेशन से निकाला।

नोट: यह मेरा कोड नहीं है, यह NLog.config nuget पैकेज से install.ps1 की सामग्री है, बस ज्ञान बांट रहा है।

मुझे थोड़ा अधिक सीधे आगे लगता है और सिर्फ दूसरों की मदद करने की उम्मीद कर रहा है जो इस पर ठोकर खाएंगे।

आप BuildAction के लिए स्वीकृत इंट वैल्यू और यहां CopyToOutputDirectory के स्वीकृत मान पा सकते हैं ।

 param($installPath, $toolsPath, $package, $project) $configItem = $project.ProjectItems.Item("NLog.config") # set 'Copy To Output Directory' to 'Copy if newer' $copyToOutput = $configItem.Properties.Item("CopyToOutputDirectory") # Copy Always Always copyToOutput.Value = 1 # Copy if Newer copyToOutput.Value = 2 $copyToOutput.Value = 2 # set 'Build Action' to 'Content' $buildAction = $configItem.Properties.Item("BuildAction") $buildAction.Value = 2 

मैंने इसे बनाया है जो मेरे बिल्ड फ़ोल्डर से आउटपुट फ़ोल्डर (बिन / डिबग या बिन / रिलीज) में फ़ाइलों की प्रतिलिपि बनाता है। मेरे लिए आकर्षण की तरह काम करता है

Nuspec फ़ाइल:

 <package> <files> <file src="\bin\Release\*.dll" target="lib" /> <file src="\bin\Release\x64\*.dll" target="build\x64" /> <file src="\bin\Release\x86\*.dll" target="build\x86" /> <file src="MyProject.targets" target="build\" /> </files> </package> 

MyProject.targets

 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <NativeLibs Include="$(MSBuildThisFileDirectory)**\*.dll" /> <None Include="@(NativeLibs)"> <Link>%(RecursiveDir)%(FileName)%(Extension)</Link> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup> </Project> 

निर्माण के बाद अपने आप को नूगेट पैकेज में फ़ाइलों को स्वचालित रूप से जोड़ने के लिए मैंने एक छोटे उपकरण को NuGetLib नाम NuGetLib है

  1. अपने Install.ps1 स्क्रिप्ट के साथ एक tools फोल्डर बनाएं
  2. अपने nugetPackage निर्माण करें
  3. टूल्स फोल्डर को निर्मित nugetPackage

https://stackoverflow.com/a/47134733/6229375