2012-06-19 12 views
13

पर संदर्भ स्थापित करता है क्या कोई NuGet पैकेज बनाने का कोई तरीका है, जहां किसी प्रोजेक्ट में पैकेज स्थापित किया जाता है, यह "स्थानीय कॉपी करें" सेट के साथ डीएलएस के संदर्भ जोड़ता है?NuGet पैकेज बनाएं जो प्रतिलिपि स्थानीय सेट के साथ संदर्भों को झूठी

मुझे लगता है कि यह 'install.ps1' फ़ाइल के भीतर किसी प्रकार की स्क्रिप्ट होगी।

+0

- नोट यहाँ मैं AssemblyReferences सूची से नामों में से सभी के लिए हो रही के अलावा अन्य के साथ कुछ भी नहीं कर रहा हूँ कि , आप फ़ाइलों को स्थानीय रूप से कॉपी क्यों नहीं करना चाहते हैं? – kiewic

+1

@kiewic कि एक उत्कृष्ट सवाल है। एक प्रश्न जो मैं चाहता हूं कि मेरे 5 साल पहले स्वयं ने निंदा की थी क्योंकि मुझे इस समय कोई जानकारी नहीं है! –

उत्तर

20

हाँ आप अनुमान लगाए गए install.ps1 के साथ ऐसा कर सकते हैं।

यहां एक उदाहरण install.ps1 है जो हर बार जब आप इसे चलाते हैं तो System.dll पर ध्वज फ़्लिप करेगा। आपको यह जानने में सक्षम होना चाहिए कि आप इस उदाहरण का उपयोग करके क्या करना चाहते हैं:

param($installPath, $toolsPath, $package, $project) 

foreach ($reference in $project.Object.References) 
{ 
    if($reference.Name -eq "System") 
    { 
     if($reference.CopyLocal -eq $true) 
     { 
      $reference.CopyLocal = $false; 
     } 
     else 
     { 
      $reference.CopyLocal = $true; 
     } 
    } 
} 

लेकिन यह एमएसडीएन दस्तावेज़ों को मदद करनी चाहिए।

+0

मुझे एक NuGet PowerSll स्क्रिप्ट में 'जोड़ने' संदर्भों के बारे में एक हंसेलमैन पोस्ट मिला: $ project.Object.References.Add ("Microsoft.CSharp") ;. यह मुझे करीब ले जाता है लेकिन मुझे दस्तावेज ढूंढने में परेशानी हो रही है कि 'स्थानीय स्थानीय' –

+0

को बदलने के संदर्भ को चुनने और संशोधित करने के तरीके को बेहतर उदाहरण के साथ उत्तर अपडेट किया गया है। –

+0

जब मैं VS2015 में यह कर मैं अक्सर डुप्लिकेट के साथ खत्म <संदर्भ शामिल = ".."> सच झूठी

6

मैं इस install.ps1 करता है लगता है पर ले कर देता है क्या आप के लिए पूछ - सभी DLLs से जोड़ा पैकेज को झूठी स्थानीय प्रतिलिपि मान दिया जाता है। आदि यदि आप लक्ष्य ढांचे के आधार पर स्थिति चाहते हैं कुछ अधिक करने के लिए हो सकता है,

param($installPath, $toolsPath, $package, $project) 

$asms = $package.AssemblyReferences | %{$_.Name} 

foreach ($reference in $project.Object.References) 
{ 
    if ($asms -contains $reference.Name + ".dll") 
    { 
     $reference.CopyLocal = $false; 
    } 
} 
बस जिज्ञासा के लिए
संबंधित मुद्दे