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.Configaş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 CleanBuild ve Rebuild yeni bir hedefi RestorePackagesolacaktır.

  • Build ve Rebuild hedeflerinin her ikisi de öğesine bağlıdırRestorePackages. Bu sayede hem çalıştırabilir Build hem Rebuild de geri yüklenen paketleri kullanabilirsiniz.
  • Cleanve BuildRebuild tüm çözüm dosyalarında ilgili MSBuild hedefini çağırın.
  • Hedef, RestorePackages her çözüm dosyası için çağrılır nuget.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="&quot;$(ToolsHome)NuGet\nuget.exe&quot; restore &quot;%(Solution.Identity)&quot;" />
    </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 buildaracılığıyla seçilir:

Build Process for git

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ı toolsbir klasörün altına yerleştirirseniz, değeri olacaktır tools\build.proj.

TF sürüm denetim şablonunda proje özelliği Projectsaracılığıyla seçilir:

Build Process for TFVC

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.