Bu, yararlı olabilmesi için geç bir on yıl olabilir, ancak belki başka birine yardımcı olur.
Sen csproj dosyasına bu hedefi ekleyebilir
, sadece sonunda halde yapıştırarak:
<Target Name="BuildDate" BeforeTargets="CoreCompile">
<PropertyGroup>
<SharedAssemblyInfoFile>$(IntermediateOutputPath)CustomAssemblyInfo.cs</SharedAssemblyInfoFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(SharedAssemblyInfoFile)" />
</ItemGroup>
<ItemGroup>
<AssemblyAttributes Include="AssemblyMetadata">
<_Parameter1>AssemblyDate</_Parameter1>
<_Parameter2>$([System.DateTime]::UtcNow.ToString("u"))</_Parameter2>
</AssemblyAttributes>
</ItemGroup>
<WriteCodeFragment Language="C#" OutputFile="$(SharedAssemblyInfoFile)" AssemblyAttributes="@(AssemblyAttributes)" />
</Target>
Bu tek bir satır içeren "obj" klasöründe bir CustomAssemblyInfo.cs dosyası oluşturacak: [assembly: AssemblyMetadata("AssemblyDate", "DATE_OF_BUILD_HERE")]
Bu dosya montaj derlenmiş olacak, bu yüzden böyle aşağıdaki kodla gibi yansıma kullanarak çalışma zamanında erişebilir:
using System;
using System.Linq;
using System.Reflection;
public class Application
{
static DateTime BuildDate;
public static DateTime GetBuildDate()
{
if (BuildDate == default(DateTime)) {
var attr = typeof(Application).Assembly.GetCustomAttributes<AssemblyMetadataAttribute>();
var dateStr = attr.Single(a => a.Key == "AssemblyDate")?.Value;
BuildDate = DateTime.Parse(dateStr);
}
return BuildDate;
}
}
Unutulmaması gereken bir şey, ben burada kullanıyorum sadece oldu AssemblyMetadataAttribute eklendi .NET 4.5.3, bu nedenle önceki bir sürümü desteklemeniz gerekiyorsa, tarih değerini tutmak için kendi özel öznitelik türünüzü tanımlayabilirsiniz.
Dikkat! Bu kod, 11 Mart 2012'de (artık yıldan beri) bir şey oluşturduğunuzda işe yaramıyor: 11 Mart yerine 12 Mart dönüyor. – JYL