2012-06-19 17 views
13

Paket bir projeye yüklendiğinde, "Yerel Kopyala" seçeneğinin false olarak ayarlandığı durumlarda bir NuGet paketi oluşturmanın bir yolu var mı?Yerel Kopyala ayarlanmış kümeler için başvuruları yükleyen NuGet paketi oluşturma

'install.ps1' dosyasında bir çeşit betik olabileceğini varsayalım.

+0

- burada ondan bütün isimleri elde dışında AssemblyReferences listesi ile hiçbir şey yapmıyorum unutmayın , neden yerel olarak kopyalanan dosyaları almak istemiyorsunuz? – kiewic

+1

@kiewic bu mükemmel bir soru. 5 yıl önce kendi kendime çocuk sahibi olmayı dilediğim bir soru, çünkü bu noktada hiçbir fikrim yok! –

cevap

20

Evet, bunu tahmin ettiğiniz gibi install.ps1 ile yapabilirsiniz.

Her çalıştırdığınızda System.dll üzerindeki bayrağı çevirecek örnek bir install.ps1 dosyası. Bu örneği kullanarak ne yapmak istediğinizi bir fikir edinebilmeniz gerekir:

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; 
     } 
    } 
} 

Ancak bu MSDN belgeleri yardımcı olmalıdır.

+0

Bir NuGet Powershell komut dosyasında 'ekleme' referansları hakkında bir Hanselman gönderisi buldum: $ project.Object.References.Add ("Microsoft.CSharp") ;. Bu beni daha da yakınlaştırıyor ama 'yerel kopya' değiştirme için bir referansın nasıl seçileceğini ve değiştirileceğini gösteren belgeleri bulmakta güçlük çekiyorum. –

+0

Yanıtı daha iyi bir örnekle güncelledik. Ben VS2015 bunu yaparken –

+0

sık sık tekrarlar da sona Gerçek Yanlış

6

olarak çözümlenir verir Ne istediğine - tarafından eklenen tüm dll paketine bir Kopya Yerel değeri yanlış verilir. vs, size hedef çerçeveye dayalı koşulları istiyorsanız şey daha yapmak gerekebilir Sadece merak için

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

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

foreach ($reference in $project.Object.References) 
{ 
    if ($asms -contains $reference.Name + ".dll") 
    { 
     $reference.CopyLocal = $false; 
    } 
} 
İlgili konular