Press ESC to close

Xamarin Forms Packages Config To Packages Reference

Merhaba arkadaşlar, bu yazıda eski Xamarin projelerimizi nasıl modernleştireceğimizden bahsedeceğim. Bunun için öncelikle neden böyle bir şeye ihtiyaç duyduğumuzdan bahsedelim. Eski tip projelerimizde, paketleri packages.config ile eklediğimiz, paketleri update etmek veya paketleri git’e attığımızda hem projenin boyutu artıyor hem de versiyon çakışmalarına yol açıyor.

Packages.config şöyle çalışır; siz bir paket yüklediğinizde, bu paketi packages.config dosyasına ekler. Packages.config dosyasına eklenen her paket, proje dosyasının içinde bulunan packages klasörüne indirilir. Bu nedenden dolayı projelerinizin boyutları çok fazla olur ve bakım maliyetlerini arttırır. PackagesReference ile beraber yüklediğiniz paketler projenin içerisine değil, ortak bir alana indirilir. Bu sayede projenin boyutu artmaz ve diğer projelerde daha önce indirilen paketleri tekrardan indirmeden kullanır. Proje açılış süresinde de artmalar olur.

Bu örnek için zamanında Progress Bar için kullandığımız açık kaynak kodlu bir proje seçtim. Buradan ulaşabilirsiniz projeye.

Projeyi açtığınızda karşınızda böyle bir yapı çıkacak karşımıza.

Bunun için öncelikle Android kısmında bulunan .csproj kısmında değişiklikler yapmamız gerekiyor. Artık bu projenin PackageReference ile paketlerin restore edileceğini belirtiyoruz. Ardından yine bu dosyada, aşağılarda görmüş olduğunuz gibi, paketleri; projede bulunan packages klasörünün içinden alıyor. Bunun yerine paketleri artık referans ile ekleyeceğimizi belirtiyoruz.

Bu işlemleri yaptıktan sonra şu şekilde gözüküyor.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <ProjectGuid>{2B700BAB-5304-4AC1-8321-6F68578D9459}</ProjectGuid>
    <OutputType>Library</OutputType>
    <RootNamespace>CustomProgressBar.Droid</RootNamespace>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
    <AndroidApplication>True</AndroidApplication>
    <AssemblyName>CustomProgressBar.Droid</AssemblyName>
    <TargetFrameworkVersion>v6.0</TargetFrameworkVersion>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug</OutputPath>
    <DefineConstants>DEBUG;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidLinkMode>None</AndroidLinkMode>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>full</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release</OutputPath>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  
  <PropertyGroup>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  </PropertyGroup>

  <ItemGroup>
      <PackageReference Include="MonoDroid.Toolkit" Version="1.1.0.0" />
      <PackageReference Include="Xamarin.Android.Support.Animated.Vector.Drawable" Version="23.3.0" />
      <PackageReference Include="Xamarin.Android.Support.Design" Version="23.3.0" />
      <PackageReference Include="Xamarin.Android.Support.v4" Version="23.3.0" />
      <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="23.3.0" />
      <PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="23.3.0" />
      <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="23.3.0" />
      <PackageReference Include="Xamarin.Android.Support.v7.RecyclerView" Version="23.3.0" />
      <PackageReference Include="Xamarin.Android.Support.Vector.Drawable" Version="23.3.0" />
      <PackageReference Include="Xamarin.Forms" Version="2.3.3.180" />
    </ItemGroup>

  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Core" />
    <Reference Include="Mono.Android" />
    <Reference Include="System.Windows" />
  </ItemGroup>

  <ItemGroup>
    <Compile Include="MainActivity.cs" />
    <Compile Include="Resources\Resource.designer.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Renderers\CircularProgressRenderer.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\AboutResources.txt" />
    <None Include="Assets\AboutAssets.txt" />
    <None Include="Properties\AndroidManifest.xml" />
  </ItemGroup>
  <ItemGroup>
    <AndroidResource Include="Resources\layout\Main.axml" />
    <AndroidResource Include="Resources\values\Strings.xml" />
    <AndroidResource Include="Resources\drawable\Icon.png" />
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
  <ItemGroup />
  <ItemGroup>
    <ProjectReference Include="..\CustomProgressBar.Portable\CustomProgressBar.Portable.csproj">
      <Project>{BCBDC8BF-157E-450D-8B1E-4CBF49A81EDA}</Project>
      <Name>CustomProgressBar.Portable</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
  </Target>
</Project>

En son işlem olarak da projeden packages.config dosyasını silebilirsiniz.

Projenizi AndroidX’e geçirmek istiyorsanız, buradan daha detaylı bilgiye ulaşabilirsiniz.

Sorularınız olursa yorum veya mail atarak sorabilirsiniz. İyi çalışmalar.

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir