Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
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.
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, özellikler seçin ve Uygulama sekmesindekiHedef çerçeve özelliğinin .NET Framework 4.7.2 olarak ayarlandığını onaylayın.
için .NET Framework sürüm 4.7.2Windows Gezgini'nde
C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses klasörüne gidin ve ContosoExpenses.Core.csprojadlı yeni bir metin dosyası oluşturun. 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.
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>Dosyayı kapatın ve Visual Studio'da ContosoExpenses çözümüne dönün.
ContosoExpenses çözümü
sağ tıklayın ve Ekle - Mevcut Proje dosyasınıseçin. Çözüme eklemek için klasöründe oluşturduğunuz ContosoExpenses.Core.csproj 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
ContosoExpenses.Data projesini .NET Standard'a
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.
Proje dosyasının tüm içeriğini silin.
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>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
ContosoExpenses.Data projesinin
ContosoExpenses.Data projesinde, Bağımlılıklar düğümünü genişletin. NuGet bölümünün eksik olduğunu unutmayın.
Çö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>ContosoExpenses.Data projesinde,
Packages.config dosyasını silin.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 
NuGet Paket Yöneticisi
penceresinde Gözat seçeneğine tıklayın.Boguspaketini arayın ve en son kararlı sürümü yükleyin.
LiteDBpaketini arayın ve en son kararlı sürümü yükleyin.
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
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
MvvmLightLibsveUnitypaketlerinin .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.ContosoExpenses.Core
projesinde Packages.config dosyasını silin.ContosoExpenses.Core projesine
sağ tıklayın ve NuGet Paketlerini Yönet 'i seçin.NuGet Paket Yöneticisi
penceresinde Gözat seçeneğine tıklayın.Unitypaketini arayın ve en son kararlı sürümü yükleyin.Unity paketi
MvvmLightLibsStd10paketini arayın ve en son kararlı sürümü yükleyin. Bu,MvvmLightLibspaketinin .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

ContosoExpenses.Core
projesinde, Bağımlılıklar düğümüne sağ tıklayın veReferans Ekle seçin.Projeler > Çözüm kategorisinde ContosoExpenses.Data 'yı seçin ve Tamam'a tıklayın.
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.
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. 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>ContosoExpenses.Core projesine
sağ tıklayın ve Projeyi Yeniden Yükle 'yi seçin. 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. 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>ContosoExpenses.Data projesine sağ tıklayın ve Projeyi Yeniden Yükleseçeneğini seçin.
Windows Uyumluluk Paketi'ni ekleme
ContosoExpenses.Core
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
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.
ContosoExpenses.Data projesine sağ tıklayın.
NuGet Paketlerini Yönetseçin.
NuGet Paket Yöneticisi
penceresinde Gözat seçeneğine tıklayın.Microsoft.Windows.Compatibilitypaketini arayın ve en son kararlı sürümü yükleyin.NuGet paketi yükleme
Şimdi ContosoExpenses.Data
projesine sağ tıklayıp derleme seç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.
ContosoExpenses.Core projesine
sağ tıklayın ve ardından "Başlangıç Projesi Olarak Ayarla" seçeneğini seçin.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.
Hata ayıklayıcıyı durdurun.
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.Kapatma öğesinden önce Project elemanına aşağıdaki kaydı ekleyin:
<ItemGroup> <Content Include="Images/*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>ContosoExpenses.Core projesine
sağ tıklayın ve Projeyi Yeniden Yükle 'yi seçin. 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

Kaydet'e tıklayın.
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.
Windows developer