.NET Core’da derleme meta verileri (AssemblyInfo.cs)

Womanne

Member


  1. .NET Core’da derleme meta verileri (AssemblyInfo.cs)

.NET Core projelerinde, meta veriler varsayılan olarak proje dosyasında depolanır. Ancak, klasik .NET’teki gibi bir AssemblyInfo.cs dosyası oluşturmak hala mümkündür.


Microsoft’un Mayıs 2019’da klasik .NET Framework’ün artık geliştirilmeyeceğini duyurmasıyla, giderek daha fazla sayıda geliştirici .NET Core’a geçiyor. .NET Core’da pek çok şey aynı kaldı, ancak bazı (şaşırtıcı) farklılıklar var.

AssemblyInfo.cs


Eğitimlerimde ve danışmanlık görevlerimde, AssemblyInfo.cs .NET Core’da kaldı. Bu dosya, tüm klasik .NET projelerinin standart içeriğinin bir parçasıdır ve bir derleme (DLL, EXE) hakkında sürüm numarası, üretici ve telif hakkı bilgileri gibi meta verileri depolar. Derleyici, bu bilgileri otomatik olarak oluşturulan derlemenin meta verilerine paketledi. Kullanıcı bunları Windows Gezgini’nde görebilir. Bazen birden fazla yol olmasına rağmen, geliştirici bunları çalışma zamanında okuyabilir:

string metadaten = "";
// Aktuelle Assembly
System.Reflection.Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();
// Versionsinfo der Assembly
Version version = ass.GetName().Version;
// Versionsinfo der Datei
var versionInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(ass.Location);
metadaten += "Assemblyversion: " + version.ToString() + "n";
metadaten += "Dateiversion: " + versionInfo.FileVersion + "n";
metadaten += "Firma: " + versionInfo.CompanyName + "n";
metadaten += "Firma (alternativer Weg): " + GetAssemblyAttribute<System.Reflection.AssemblyCompanyAttribute>(ass)?.Company + "n";
metadaten += "Produkt: " + versionInfo.ProductName + "n";
metadaten += "Produkt (alternativer Weg): " + GetAssemblyAttribute<System.Reflection.AssemblyProductAttribute>(ass)?.Product + "n";
metadaten += "Kommentare: " + versionInfo.Comments + "n";
metadaten += "Copyright: " + GetAssemblyAttribute<System.Reflection.AssemblyCopyrightAttribute>(ass)?.Copyright;

Şimdi, klasik .NET’te böyle bir şeye sahip olmak zorunlu değildi. AssemblyInfo.cs projeye teslim olmak zorunda kaldı. Ancak mevcut değilse, ilgili API’ler ya herhangi bir veri sağlamadı ya da sürüm numarası 0.0.0.0 olarak görüntülendi.

.NET Core’da varsayılan olarak AssemblyInfo.cs yok


Bir .NET Core projesinde (WPF, Windows Forms, konsol veya ASP.NET Core içeren web) hayır AssemblyInfo.cs oluşturuldu. Aşağıdaki şekilde, .NET Core 3.0’da WPF için örnek proje şablonu gösterilmektedir:




.NET Çekirdek projesi




.NET Core proje dosyasındaki meta bilgiler


Ancak bir .NET Core projesinde aslında API’den bilgi olması şaşırtıcıdır. Sürüm 1.0 olarak teslim edilir, firma ve ürün ile birlikte proje adını alırsınız. Telif hakkı ve yorum boş kalır.

Proje özelliklerinde “Paket” sekmesine bakarak bilgileri görebilirsiniz:




Bir .NET Core projesinin paket özelliği




Microsoft’un bu bilgiyi proje dosyasına koyduğu düşünülebilir, ancak orada değildir. Yalnızca derleme sırasında dinamik olarak oluşturulurlar ve “objDebugnetcoreapp3.0NETCoreConsolApp.AssemblyInfo.cs” dosyasında saklanırlar.

Aşağıdakiler artık geçerlidir: “Paket” sekmesindeki proje özelliklerinde bu bilgileri değiştirirseniz, Microsoft bu değişiklikleri proje dosyasına kaydeder.

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF>
<Version>1.1.0.0</Version>
<Authors>Dr. Holger Schwichtenberg</Authors>
<Company>www.IT-Visions.de</Company>
<Product>NETCoreBeispiele</Product>
<Description>Beispiel für das Ändern der AssemblyInfos</Description>
<Copyright>(C) Dr. Holger Schwichtenberg 2019</Copyright>
<PackageReleaseNotes>v1.0 erste Version, v1.1 verbessertes Layout</PackageReleaseNotes>
<PackageProjectUrl />
<PackageTags>Demo,Console</PackageTags>
</PropertyGroup>
</Project>
.NET Core’da Kendi AssemblyInfo.cs dosyasına sahip olun


Eğer biri AssemblyInfo.cs projede (klasik bir .NET projesinden geçiş yapılırken de kopyalanır), derleyici bazı özniteliklerin artık çoğaltıldığından şikayet eder. Bunun nedeni, “objDebugnetcoreapp3.0NETCoreConsolApp.AssemblyInfo.cs” dosyasının zaten oluşturulmuş olması ve iki AssemblyInfo dosyasının derlenmekte olmasıdır.

Eğer birine sahipsen AssemblyInfo.cs kullanmak istiyorsanız, proje dosyanızdaki bu manuel girişle otomatik oluşturmayı kapatmanız gerekir:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
...
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>

“Paket” sekmesi artık AssemblyInfo.cs dosyasından ve proje dosyasından, uzantılı karma bilgileri gösteriyor AssemblyInfo.cs önceliğe sahiptir. Ancak, etiket ve yazar gibi bazı bilgiler dosyada bulunabilir. AssemblyInfo.cs ne yazık ki henüz kaydedilmedi.


()



Haberin Sonu
 
Üst