Team Foundation Derlemesi ile paket geri yükleme ayarlama
Bu makalede, hem Git hem de Team Services Sürüm Denetimi için her ikisi için de Team Services Derlemesi'nin bir parçası olarak paketlerin nasıl geri yükleneceğine ilişkin ayrıntılı bir izlenecek yol sağlanır.
Bu kılavuz Visual Studio Team Services kullanma senaryosuna özgü olsa da, kavramlar diğer sürüm denetimi ve derleme sistemleri için de geçerlidir.
Şunun için geçerlidir:
- TFS'nin herhangi bir sürümünde çalışan özel MSBuild projeleri
- Team Foundation Server 2012 veya öncesi
- TFS 2013 veya sonraki bir sürüme geçirilen Özel Team Foundation Derleme İşlemi Şablonları
- Nuget Geri Yükleme işlevselliği kaldırılmış şekilde İşlem Şablonları Oluşturma
Derleme işlemi şablonlarıyla Visual Studio Team Services veya Team Foundation Server 2013 kullanıyorsanız, derleme işleminin bir parçası olarak otomatik paket geri yükleme gerçekleşir.
Genel yaklaşım
NuGet kullanmanın bir avantajı, sürüm denetim sisteminizde ikili dosyaları denetlemekten kaçınmak için bunu kullanabilmenizdir.
Geliştiricilerin yerel olarak çalışmaya başlayabilmesi için önce tüm geçmiş de dahil olmak üzere tüm depoyu kopyalaması gerektiğinden, git gibi bir dağıtılmış sürüm denetim sistemi kullanıyorsanız bu özellikle ilginçtir. İkili dosyalar genellikle değişiklik sıkıştırması olmadan depolandığından ikili dosyaların denetlenerek depoda önemli bir şişkinlik oluşabilir.
NuGet, derlemenin bir parçası olarak paketlerin uzun süredir geri yüklenmesini desteklemiştir. NuGet projeyi oluştururken paketleri geri yüklediğinden, önceki uygulamada derleme işlemini genişletmek isteyen paketler için tavuk ve yumurta sorunu vardı. Ancak, MSBuild derleme sırasında derlemenin genişletilmesine izin vermez; biri bunun MSBuild'de bir sorun olduğunu iddia edebilir, ancak bunun doğal bir sorun olduğunu savunabilirim. Genişletmeniz gereken boyuta bağlı olarak, paketiniz geri yüklenene kadar kaydolmak için çok geç olabilir.
Bu sorunun çözümü, derleme işleminin ilk adımı olarak paketlerin geri yüklendiğinden emin olmaktır:
nuget restore path\to\solution.sln
Derleme işleminiz kodu oluşturmadan önce paketleri geri yüklerken dosyaları iade .targets
etmeniz gerekmez
Not
Visual Studio'da yüklemeye izin vermek için paketlerin yazılması gerekir. Aksi takdirde, diğer geliştiricilerin önce paketleri geri yüklemek zorunda kalmadan çözümü açabilmesi için dosyaları iade .targets
etmek isteyebilirsiniz.
Aşağıdaki tanıtım projesinde, klasörlerin ve .targets
dosyaların iade edilmesi gerekmeyecek şekilde derlemenin packages
nasıl ayarlanacağı gösterilmektedir. Ayrıca, bu örnek proje için Team Foundation Service'te otomatik bir derlemenin nasıl ayarlanacağı da gösterilir.
Depo yapısı
Tanıtım projemiz, Bing'i sorgulamak için komut satırı bağımsız değişkenini kullanan basit bir komut satırı aracıdır. .NET Framework 4'i hedefler ve BCL paketlerinin çoğunu (Microsoft.Net.Http, Microsoft.Bcl, Microsoft.Bcl.Async ve Microsoft.Bcl.Build) kullanır.
Deponun yapısı aşağıdaki gibi görünür:
<Project>
│ .gitignore
│ .tfignore
│ build.proj
│
├───src
│ │ BingSearcher.sln
│ │
│ └───BingSearcher
│ │ App.config
│ │ BingSearcher.csproj
│ │ packages.config
│ │ Program.cs
│ │
│ └───Properties
│ AssemblyInfo.cs
│
└───tools
└───NuGet
nuget.exe
Klasöre veya herhangi bir .targets
dosyaya packages
giriş yapmadığımızı görebilirsiniz.
Ancak derleme sırasında gerekli olduğu için öğesini iade nuget.exe
ettik. Yaygın olarak kullanılan kuralları izleyerek paylaşılan tools
bir klasör altında iade ettik.
Kaynak kod klasörün altındadır src
. Tanıtımımız yalnızca tek bir çözüm kullansa da, bu klasörün birden fazla çözüm içerdiğini kolayca düşünebilirsiniz.
Dosyaları yoksayma
Not
Şu anda istemcinin klasörü sürüm denetimine eklemesine packages
neden olan bir [known bug in the NuGet client](https://nuget.codeplex.com/workitem/4072)
dosya vardır. Geçici çözüm, kaynak denetimi tümleştirmesini devre dışı bırakmaktır. Bunu yapmak için, klasörünüzde .nuget
çözümünüzle paralel bir Nuget.Config
dosyaya ihtiyacınız vardır. Bu klasör henüz yoksa, oluşturmanız gerekir. içine Nuget.Config
aşağıdaki içeriği ekleyin:
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
Paket klasörlerini iade etme amacıyla kullanmadığımız sürüm denetimiyle iletişim kurmak için hem git () hem de TF sürüm denetimi (.gitignore
) için yoksay dosyaları ekledik.tfignore
. Bu dosyalar iade etmek istemediğiniz dosyaların desenlerini açıklar.
Dosya .gitignore
aşağıdaki gibi görünür:
syntax: glob
*.user
*.suo
bin
obj
packages
*.nupkg
project.lock.json
project.assets.json
Dosya .gitignore
oldukça güçlü. Örneğin, klasörün içeriğini packages
genel olarak iade etmek istemiyorsanız ancak dosyaları iade .targets
etme konusunda önceki yönergeleri kullanmak istiyorsanız, bunun yerine aşağıdaki kurala sahip olabilirsiniz:
packages
!packages/**/*.targets
Bu işlem tüm packages
klasörleri dışlar ancak kapsanan .targets
tüm dosyaları yeniden ekler. Bu arada, Visual Studio geliştiricilerinin ihtiyaçlarına özel olarak uyarlanmış dosyalar için .gitignore
bir şablon bulabilirsiniz.
TF sürüm denetimi.tfignore dosyası aracılığıyla çok benzer bir mekanizmayı destekler. Söz dizimi hemen hemen aynıdır:
*.user
*.suo
bin
obj
packages
*.nupkg
project.lock.json
project.assets.json
build.proj
Tanıtımımız için derleme işlemini oldukça basit tutuyoruz. Çözümleri oluşturmadan önce paketlerin geri yüklendiğinden emin olurken tüm çözümleri derleyen bir MSBuild projesi oluşturacağız.
Bu projenin üç geleneksel hedefi Clean
Build
ve Rebuild
yeni bir hedefi RestorePackages
olacaktır.
Build
veRebuild
hedeflerinin her ikisi de öğesine bağlıdırRestorePackages
. Bu sayede hem çalıştırabilirBuild
hemRebuild
de geri yüklenen paketleri kullanabilirsiniz.Clean
veBuild
Rebuild
tüm çözüm dosyalarında ilgili MSBuild hedefini çağırın.- Hedef,
RestorePackages
her çözüm dosyası için çağrılırnuget.exe
. Bu, MSBuild'in toplu işlem işlevselliği kullanılarak gerçekleştirilir.
Sonuç aşağıdaki gibi görünür:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutDir Condition=" '$(OutDir)'=='' ">$(MSBuildThisFileDirectory)bin\</OutDir>
<Configuration Condition=" '$(Configuration)'=='' ">Release</Configuration>
<SourceHome Condition=" '$(SourceHome)'=='' ">$(MSBuildThisFileDirectory)src\</SourceHome>
<ToolsHome Condition=" '$(ToolsHome)'=='' ">$(MSBuildThisFileDirectory)tools\</ToolsHome>
</PropertyGroup>
<ItemGroup>
<Solution Include="$(SourceHome)*.sln">
<AdditionalProperties>OutDir=$(OutDir);Configuration=$(Configuration)</AdditionalProperties>
</Solution>
</ItemGroup>
<Target Name="RestorePackages">
<Exec Command=""$(ToolsHome)NuGet\nuget.exe" restore "%(Solution.Identity)"" />
</Target>
<Target Name="Clean">
<MSBuild Targets="Clean"
Projects="@(Solution)" />
</Target>
<Target Name="Build" DependsOnTargets="RestorePackages">
<MSBuild Targets="Build"
Projects="@(Solution)" />
</Target>
<Target Name="Rebuild" DependsOnTargets="RestorePackages">
<MSBuild Targets="Rebuild"
Projects="@(Solution)" />
</Target>
</Project>
Ekip Derlemesini Yapılandırma
Ekip Derlemesi çeşitli işlem şablonları sunar. Bu tanıtım için Team Foundation Hizmeti'ni kullanıyoruz. Ancak TFS'nin şirket içi yüklemeleri çok benzer olacaktır.
Git ve TF Sürüm Denetimi farklı Ekip Derleme şablonlarına sahiptir, bu nedenle aşağıdaki adımlar kullandığınız sürüm denetim sistemine bağlı olarak değişir. Her iki durumda da tek ihtiyacınız olan derlemek istediğiniz proje olarak build.proj dosyasını seçmektir.
İlk olarak git için işlem şablonuna bakalım. Git tabanlı şablonda derleme özelliği Solution to build
aracılığıyla seçilir:
Bu özelliğin deponuzdaki bir konum olduğunu lütfen unutmayın. bizim build.proj
kök olduğundan, biz sadece kullandık build.proj
. Derleme dosyasını adlı tools
bir klasörün altına yerleştirirseniz, değeri olacaktır tools\build.proj
.
TF sürüm denetim şablonunda proje özelliği Projects
aracılığıyla seçilir:
Git tabanlı şablonun aksine, TF sürüm denetimi seçicileri destekler (sağ taraftaki üç noktalı düğme). Bu nedenle, yazma hatalarından kaçınmak için bunları kullanarak projeyi seçmenizi öneririz.