2012-03-20 23 views
36

İki depomuz var ve diğer bir arşivden derlenmiş kütüphanelere ihtiyacım var. Güncellenmiş kütüphaneler için repo1'i manuel olarak kontrol etmek ve repo2'ye kopyalamak/kopyalamak istemiyorum çünkü bu aptalca. Gerekli kütüphanelerin her bir yapısında NuGet paketleri oluşturup bunları bir iç NuGet sunucusuna yayınladım. Repo2'deki projeler daha sonra bu NuGet paketlerine referans verebilir ve her şey (neredeyse) çalışır.NuGet paketlerini en son kullanılabilir sürüme otomatik olarak güncelleştirme

Bu son bir engel, Repo2'nin projelerinde NuGet paketlerini otomatik olarak güncelleştiriyor. Repo1'deki kitaplıkların ne zaman güncelleneceğini bilmediğimden (ve yapmam gerekmemesi gerektiğinden), NuPet paketlerini otomatik olarak güncelleyecek olan repo2'deki projeler üzerinde bir tür oluşturma olayı istiyorum. Şu anda sadece bir pre-build olayı yapıyorum, ancak packages.config dosyaları kurulu paketin sürüm numarasını içerdiğinden, repo2'de değiştirilmiş dosyalar almaya devam ediyorum (packages.config dosyaları güncellenir).

Bu yüzden sorum şu: Repo2 VCS'yi boşaltmadan NuGet paketlerini otomatik olarak yükseltmenin iyi bir yolu nedir? ScottGu, paket güncellemelerini CI yapılarına kadar çırpmanın mümkün olduğunu Here (yorumlarda) söylüyor, ancak o ve benim mevcut çözümümün nasıl dağınık olduğunu belirtmiyor. Eksik olduğum şekilde inşa edilmiş mi? Ya da daha iyi iş çevreleri?

+3

nasıl yapılacağını açıklar. Kütüphaneler yazılımınızı değiştirebilir ve bozabilir. http://blog.heroku.com/archives/2011/6/28/the_new_heroku_4_erosion_resistance_explicit_contracts/ –

+8

Bu bizim otomatik test paketimizin bizim için ne olduğunu – themilkyninja

+0

@themilkyninja hiç bir çözüm yerine getirdiniz mi? Aynı konuyla yüzleşiyorum. – stevebot

cevap

3

Muhtemelen Nuget Paketi özelliğini (burada bilgi biraz: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages) Restore kaldıraç olabilir

proje yapı anda, packages.config paketleri yeniden yüklemek için "nuget.exe -install" çağırır. Denemedim ancak nuget.targets dosyasına aynı şekilde bir Güncelleme komutu ekleyebilirsiniz. (Hem nuget.exe güncellemesini hem de varolan nuget.exe kurulumunu çağırmanız gerekir).

+4

Buna baktım ve yalnızca paketlenmiş paketler paketine geri yükledim (gerçek projeye değil). Dosyaları projeye ya da 'nuget.exe güncelleştirmesi' ne de 'nuget.ext' kurulumuna geri almak istemiyorum. Temel olarak, aradığım şey [bu özellik] (http://nuget.codeplex.com/workitem/1239) – themilkyninja

-1

Böyle bir "BeforeBuild" hedefini gerçekleştirmek için sizin .cspoj dosyasını değiştirebilirsiniz: o

<Target Name="BeforeBuild"> 
    <Exec Command="&quot;$(SolutionDir).nuget\NuGet&quot; update &quot;$(ProjectDir)packages.config&quot; -Id your.package.id" /> 
</Target> 

Not: u ur çözüm dizininde "Nuget.exe" olması gerekir

+1

Bu, önceden oluşturulmuş adımlara eklemek kadar kolay değil. Aslında bu aslında çok geç: http://stackoverflow.com/questions/15027256/cannot-automatically-update-a-nuget-package-to-the-latest-version-during-build –

0

Bu dikkatli olun MSBuild

http://netitude.bc3tech.net/2014/11/28/auto-update-your-nuget-packages-at-build-time/ aracılığıyla

<Target Name="UpdatePackages" DependsOnTargets="CheckPrerequisites"> 
    <Exec Command="$(UpdateCommand)" 
     Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" /> 

    <Exec Command="$(UpdateCommand)" 
     LogStandardErrorAsError="true" 
     Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" /> 
</Target> 


<!-- Commands --> 
<UpdateCommand>$(NuGetCommand) update "$(PackagesConfig)" -source "$(PackageSources)" -id AutoUpdater $(NonInteractiveSwitch)</UpdateCommand> 
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand> 

<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand> 

<!-- We need to ensure packages are restored prior to assembly resolve --> 
<BuildDependsOn Condition="$(RestorePackages) == 'true'"> 
    RestorePackages; 
    UpdatePackages; 
    $(BuildDependsOn); 
</BuildDependsOn> 
İlgili konular