Aracılığıyla paylaş


Bölüm 1: Contoso Expenses uygulamasını .NET Core 3'e geçirme

Bu, Contoso Expenses adlı örnek bir WPF masaüstü uygulamasının nasıl modernleştirildiğini gösteren öğreticinin ilk bölümüdür. Öğreticiye, önkoşullara ve örnek uygulamayı indirme yönergelerine genel bakış için bkz. Öğretici: WPF uygulamasınımodernleştirme.

Öğreticinin bu bölümünde Contoso Expenses uygulamasının tamamını .NET Framework 4.7.2'den .NET Core 3'e geçirebilirsiniz. Öğreticinin bu bölümüne başlamadan önce, Visual Studio 2019'da ContosoExpenses örneğini açtığınızdan ve derlediğinizden emin olun.

Uyarı

Daha fazla bilgi için WPF uygulamasını .NET Framework'ten .NET Core 3'e geçirme konusunda bu blog serisinibkz.

ContosoExpenses projesini .NET Core 3'e geçirme

Bu bölümde Contoso Expenses uygulamasındaki ContosoExpenses projesini .NET Core 3'e geçireceksiniz. Bunu, mevcut ContosoExpenses projesiyle aynı dosyaları içeren ancak .NET Framework 4.7.2 yerine .NET Core 3'i hedefleyen yeni bir proje dosyası oluşturarak yapacaksınız. Bu, uygulamanın hem .NET Framework hem de .NET Core sürümleriyle tek bir çözüm tutmanızı sağlar.

  1. ContosoExpenses projesinin şu anda .NET Framework 4.7.2'yi hedeflediğini doğrulayın. Çözüm Gezgini'nde ContosoExpenses projesi sağ tıklayın, özelliklerseçin ve Uygulama sekmesindeki Hedef çerçeve özelliğinin .NET Framework 4.7.2 olarak ayarlandığını onaylayın.

    Proje için .NET Framework sürüm 4.7.2

  2. Windows Gezgini'nde C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses klasörüne gidin ve ContosoExpenses.Core.csprojadlı yeni bir metin dosyası oluşturun.

  3. Dosyaya sağ tıklayın, ile aç'ı seçin ve not defteri, Visual Studio Code veya Visual Studio gibi istediğiniz bir metin düzenleyicisinde açın.

  4. Aşağıdaki metni dosyaya kopyalayın ve kaydedin.

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <UseWPF>true</UseWPF>
     </PropertyGroup>
    
    </Project>
    
  5. Dosyayı kapatın ve Visual Studio'da ContosoExpenses çözümüne dönün.

  6. ContosoExpenses çözümü sağ tıklayın ve Ekle - Mevcut Proje seçin. Çözüme eklemek için klasöründe oluşturduğunuz ContosoExpenses.Core.csproj dosyasını seçin.

ContosoExpenses.Core.csproj aşağıdaki öğeleri içerir:

  • Project öğesi, Microsoft.NET.Sdk.WindowsDesktopsdk sürümünü belirtir. Bu, Windows Masaüstü için .NET uygulamalarını ifade eder ve WPF ve Windows Forms uygulamalarına yönelik bileşenleri içerir.
  • PropertyGroup öğesi, proje çıktısının yürütülebilir (DLL değil) olduğunu belirten alt öğeler içerir, .NET Core 3'ü hedefler ve WPF kullanır. Windows Forms uygulaması için, UseWPF öğesi yerine UseWinForms öğesi kullanırsınız.

Uyarı

.NET Core 3.0 ile sunulan .csproj biçimiyle çalışırken, .csproj ile aynı klasördeki tüm dosyalar projenin bir parçası olarak kabul edilir. Bu nedenle, projeye dahil olan her dosyayı belirtmeniz gerekmez. Yalnızca özel derleme eylemini tanımlamak istediğiniz veya dışlamak istediğiniz dosyaları belirtmeniz gerekir.

ContosoExpenses.Data projesini .NET Standard'a geçirme

ContosoExpenses çözümü, hizmetler ve hedefler .NET 4.7.2 için modeller ve arabirimler içeren ContosoExpenses.Data sınıf kitaplığını içerir. .NET Core 3.0 uygulamaları.NET Core'da bulunmayan API'leri kullanmadıkları sürece .NET Framework kitaplıklarını kullanabilir. Ancak en iyi modernleştirme yolu kitaplıklarınızı .NET Standard'a taşımaktır. Bu, kitaplığınızın .NET Core 3.0 uygulamanız tarafından tam olarak desteklendiğinden emin olur. Ayrıca kitaplığı web gibi diğer platformlarla da yeniden kullanabilirsiniz (ASP.NET Core aracılığıyla).

ContosoExpenses.Data projesini .NET Standard'a geçirmek için:

  1. Visual Studio'da ContosoExpenses.Data projesine sağ tıklayın ve Projeyi Kaldır seçeneğini seçin. Projeye yeniden sağ tıklayın ve sonra Edit ContosoExpenses.Data.csprojseçin.

  2. Proje dosyasının tüm içeriğini silin.

  3. Aşağıdaki XML'yi kopyalayıp yapıştırın ve dosyayı kaydedin.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    
    </Project>
    
  4. ContosoExpenses.Data projesine sağ tıklayın ve Projeyi Yeniden Yükleseçeneğini seçin.

NuGet paketlerini ve bağımlılıklarını yapılandırma

ContosoExpenses.Core geçirip önceki bölümlerde ContosoExpenses.Data projelerini , projelerden NuGet paket başvurularını kaldırmıştınız. Bu bölümde, bu referansları geri ekleyeceksiniz.

ContosoExpenses.Data projesinin NuGet paketlerini yapılandırmak için:

  1. ContosoExpenses.Data projesinde, Bağımlılıklar düğümünü genişletin. NuGet bölümünün eksik olduğunu unutmayın.

    NuGet paketlerini

    Çözüm Gezgini'nde Packages.config açarsanız projeyi tam .NET Framework kullanırken kullanılan NuGet paketlerinin 'eski' başvurularını bulursunuz.

    bağımlılıkları ve paketleri

    Packages.config dosyasının içeriği aşağıdadır. Tüm NuGet Paketlerinin Tam .NET Framework 4.7.2'yi hedeflediğini göreceksiniz:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Bogus" version="26.0.2" targetFramework="net472" />
      <package id="LiteDB" version="4.1.4" targetFramework="net472" />
    </packages>
    
  2. ContosoExpenses.Data projesinde, Packages.config dosyasını silin.

  3. ContosoExpenses.Data projesinde Bağımlılıklar düğümüne sağ tıklayın ve NuGet Paketlerini Yönetseçeneğini seçin.

NuGet Paketlerini Yönet...

  1. NuGet Paket Yöneticisi penceresinde Gözatseçeneğine tıklayın. Bogus paketini arayın ve en son kararlı sürümü yükleyin.

    Bogus NuGet paketi

  2. LiteDB paketini arayın ve en son kararlı sürümü yükleyin.

    LiteDB NuGet paketi

    Projede artık bir packages.config dosyası olmadığından bu NuGet paketleri listesinin nerede depolandığını merak ediyor olabilirsiniz. Başvurulan NuGet paketleri doğrudan .csproj dosyasında depolanır. ContosoExpenses.Data.csproj proje dosyasının içeriğini bir metin düzenleyicisinde görüntüleyerek bu denetimi yapabilirsiniz. Dosyanın sonuna aşağıdaki satırların eklendiğini göreceksiniz:

    <ItemGroup>
       <PackageReference Include="Bogus" Version="26.0.2" />
       <PackageReference Include="LiteDB" Version="4.1.4" />
    </ItemGroup>
    

    Uyarı

    Bu .NET Core 3 projesi için .NET Framework 4.7.2 projeleri tarafından kullanılanlarla aynı paketleri yüklediğinizi de fark edebilirsiniz. NuGet paketleri çoklu hedeflemeyi destekler. Kitaplık yazarları, farklı mimariler ve platformlar için derlenmiş bir kitaplığın farklı sürümlerini aynı pakete ekleyebilir. Bu paketler tam .NET Framework'ün yanı sıra .NET Core 3 projeleriyle uyumlu .NET Standard 2.0'ı destekler. .NET Framework, .NET Core ve .NET Standard farkları hakkında daha fazla bilgi için bkz. .NET Standard.

ContosoExpenses.Core projesinin NuGet paketlerini yapılandırmak için:

  1. ContosoExpenses.Core projesinde packages.config dosyasını açın. Şu anda .NET Framework 4.7.2'yi hedefleyen aşağıdaki başvuruları içerdiğine dikkat edin.

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="CommonServiceLocator" version="2.0.2" targetFramework="net472" />
      <package id="MvvmLightLibs" version="5.4.1.1" targetFramework="net472" />
      <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
      <package id="Unity" version="5.10.2" targetFramework="net472" />
    </packages>
    

    Aşağıdaki adımlarda MvvmLightLibs ve Unity paketlerinin .NET Standart sürümlerine yer veririm. Diğer ikisi, bu iki kitaplığı yüklediğinizde NuGet tarafından otomatik olarak indirilen bağımlılıklardır.

  2. ContosoExpenses.Core projesinde Packages.config dosyasını silin.

  3. ContosoExpenses.Core projesine sağ tıklayın ve NuGet Paketlerini Yönet'i seçin.

  4. NuGet Paket Yöneticisi penceresinde Gözatseçeneğine tıklayın. Unity paketini arayın ve en son kararlı sürümü yükleyin.

    Unity paketi

  5. MvvmLightLibsStd10 paketini arayın ve en son kararlı sürümü yükleyin. Bu, MvvmLightLibs paketinin .NET Standart sürümüdür. Bu paket için yazar kitaplığın .NET Standard sürümünü .NET Framework sürümünden ayrı bir pakette paketlemeyi seçti.

    MvvmLightsLibs paketi

  6. ContosoExpenses.Core projesinde, Bağımlılıklar düğümüne sağ tıklayın ve Referans Ekleseçin.

  7. Projeler > Çözüm kategorisinde ContosoExpenses.Data 'yı seçin ve Tamam'a tıklayın.

    Başvuru Ekle

Otomatik oluşturulan derleme özniteliklerini devre dışı bırakma

Geçiş işleminin bu noktasında ContosoExpenses.Core projesini oluşturmaya çalışırsanız bazı hatalar görürsünüz.

.NET Core 3 derleme yeni hataları

Bu sorun, .NET Core 3.0 ile sunulan yeni .csproj biçiminin derleme bilgilerini AssemblyInfo.cs dosyası yerine proje dosyasında depolaması nedeniyle oluşur. Bu hataları düzeltmek için bu davranışı devre dışı bırakın ve projenin AssemblyInfo.cs dosyasını kullanmaya devam etmesine izin verin.

  1. Visual Studio'da ContosoExpenses.Core sağ tıklayın ve ProjeKaldır'ı seçin. Projeye yeniden sağ tıklayın ve ardından ContosoExpenses.Core.csprojdüzenle'yi seçin.

  2. PropertyGroup bölümüne aşağıdaki öğeyi ekleyin ve dosyayı kaydedin.

    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    

    Bu öğe eklendikten sonra PropertyGroup bölümü şu şekilde görünmelidir:

    <PropertyGroup>
      <OutputType>WinExe</OutputType>
      <TargetFramework>netcoreapp3.0</TargetFramework>
      <UseWPF>true</UseWPF>
      <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
    
  3. ContosoExpenses.Core projesine sağ tıklayın ve Projeyi Yeniden Yükle'yi seçin.

  4. ContosoExpenses.Data projesine sağ tıklayın ve Projeyi Kaldır'ı seçin . Projeye yeniden sağ tıklayın ve sonra Edit ContosoExpenses.Data.csprojseçin.

  5. aynı girdiyi PropertyGroup bölümüne ekleyin ve dosyayı kaydedin.

    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    

    Bu öğe eklendikten sonra PropertyGroup bölümü şu şekilde görünmelidir:

    <PropertyGroup>
      <TargetFramework>netstandard2.0</TargetFramework>
      <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
    
  6. ContosoExpenses.Data projesine sağ tıklayın ve Projeyi Yeniden Yükleseçeneğini seçin.

Windows Uyumluluk Paketi'ni ekleme

ContosoExpenses.Core derlemeye ve ContosoExpenses.Data projelerini çalışırsanız, önceki hataların düzeltildiğini ancak ContosoExpenses.Data kitaplığında bunlara benzer bazı hatalar olduğunu görürsünüz.

Services\RegistryService.cs(9,26,9,34): error CS0103: The name 'Registry' does not exist in the current context Services\RegistryService.cs(12,26,12,34): error CS0103: The name 'Registry' does not exist in the current context Services\RegistryService.cs(12,97,12,123): error CS0103: The name 'RegistryKeyPermissionCheck' does not exist in the current context

Bu hatalar ContosoExpenses.Data projesini bir .NET Framework kitaplığından (Windows'a özeldir) linux, Android, iOS ve daha birçok platformda çalışabilen bir .NET Standard kitaplığına dönüştürmenin sonucudur. ContosoExpenses.Data projesi , yalnızca Windows kavramı olan kayıt defteriyle etkileşim kuran RegistryServiceadlı bir sınıf içerir.

Bu hataları çözmek için Windows Uyumluluğu NuGet paketini yükleyin. Bu paket, .NET Standart kitaplığında kullanılacak Windows'a özgü birçok API için destek sağlar. Kitaplık artık bu paketi kullandıktan sonra platformlar arası olmayacak, ancak .NET Standard'ı hedeflemeye devam edecektir.

  1. ContosoExpenses.Data projesine sağ tıklayın.

  2. NuGet Paketlerini Yönetseçin.

  3. NuGet Paket Yöneticisi penceresinde Gözatseçeneğine tıklayın. Microsoft.Windows.Compatibility paketini arayın ve en son kararlı sürümü yükleyin.

    NuGet paketi yükleme

  4. Şimdi ContosoExpenses.Data projesine sağ tıklayıp derlemeseçerek projeyi derlemeyi yeniden deneyin.

Bu kez derleme işlemi hatasız tamamlanır.

Geçişi test edip hatalarını ayıklama

Projeler başarıyla derlendiğini göre, herhangi bir çalışma zamanı hatası olup olmadığını görmek için uygulamayı çalıştırmaya ve test etmeye hazırsınız.

  1. ContosoExpenses.Core projesine sağ tıklayın ve ardından "Başlangıç Projesi Olarak Ayarla"seçeneğini seçin.

  2. F5 tuşuna basarak ContosoExpenses.Core projesini hata ayıklayıcıda başlatın. Aşağıdakine benzer bir özel durum görürsünüz.

    Visual Studio'da görüntülenen Özel Durumu

    Geçişin başında içeriği .csproj dosyasından sildiğinizde görüntü dosyaları için Derleme eylemi hakkındaki bilgileri kaldırdığınız için bu özel durum ortaya çıkar. Aşağıdaki adımlar bu sorunu düzeltir.

  3. Hata ayıklayıcıyı durdurun.

  4. ContosoExpenses.Core projesine sağ tıklayın ve Projeyi Kaldır'ıseçin. Projeye yeniden sağ tıklayın ve ardından ContosoExpenses.Core.csprojdüzenle'yi seçin.

  5. Kapatma öğesinden önce Project elemanına aşağıdaki kaydı ekleyin:

    <ItemGroup>
      <Content Include="Images/*">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
    
  6. ContosoExpenses.Core projesine sağ tıklayın ve Projeyi Yeniden Yükle'yi seçin.

  7. Uygulamaya Contoso.ico'yu atamak için, ContosoExpenses.Core projesine sağ tıklayın ve Özellikleröğesini seçin. Açılan sayfada, Simgesi altındaki açılan menüye tıklayın ve Images\contoso.icoöğesini seçin.

    Projenin Özelliklerindeki Contoso simgesi

  8. Kaydet'e tıklayın.

  9. F5 tuşuna basarak ContosoExpenses.Core projesini hata ayıklayıcıda başlatın. Uygulamanın şimdi çalıştığını onaylayın.

Sonraki Adımlar

Eğitimin bu aşamasında, Contoso Expenses uygulamasını .NET Core 3'e başarıyla geçirdiniz. Artık Bölüm 2 için hazırsınız: XAML Adalarıkullanarak UWP InkCanvas denetimi ekleme.

Uyarı

Yüksek çözünürlüklü bir ekranınız varsa uygulamanın çok küçük göründüğünü fark edebilirsiniz. Dersin sonraki adımında bu sorunu ele alacaksınız.