ASP.NET - показать дату сборки/информацию о приложении в нижней части экрана
У меня есть веб-приложение asp.net, в котором есть несколько версий, развернутых на разных серверах клиентов внутри их сетей. Одна из практических задач, которую мы имеем, заключается в том, чтобы иметь клиентские скриншоты электронной почты при возникновении проблем.
В старом asp.net 1.1 дня мы могли бы получить детали DLL сборки, используя отражение и показать информацию о дате сборки и нумерации на экране в тонком месте.
С .NET 2.0 и выше модель сборки изменилась, и этот механизм больше не работает. Я слышал о различных системах сборки там, но я действительно ищу простейший путь в рамках 3.5, чтобы сделать то, что эта функциональность сделала на платформе 1.1.
- Каждый раз, когда выполняется сборка, обновляйте дату сборки/время и как-то обновляйте номер сборки
- Уметь видеть временную метку и номер сборки для отображения на экране
- быть максимально простым в реализации
Ответы
Ответ 1
Мы используем .Net 2.0 и вытаскиваем информацию о версии из сборки. Возможно, это не идеально, но мы используем описание для хранения даты сборки.
Assembly assembly = Assembly.GetExecutingAssembly();
string version = assembly.GetName().Version.ToString();
string buildDate = ((AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
assembly, typeof(AssemblyDescriptionAttribute))).Description;
В процессе сборки используется asminfonant task для создания файла AssemblyInfo.cs, который содержит эту информацию.
<asminfo output="Properties\AssemblyInfo.cs" language="CSharp">
<imports>
<import namespace="System" />
<import namespace="System.Reflection" />
<import namespace="System.Runtime.CompilerServices" />
<import namespace="System.Runtime.InteropServices" />
</imports>
<attributes>
<attribute type="AssemblyVersionAttribute" value="${assembly.version}" />
<attribute type="AssemblyInformationalVersionAttribute" value="${assembly.version}" />
<attribute type="AssemblyDescriptionAttribute" value="${datetime::now()}" />
...
</attributes>
</asminfo>
Ответ 2
Я решил использовать дату исполняющей сборки.
Как я могу опубликовать файлы, это прекрасно работает.
lblVersion.Text = String.Format("Version: {0}<br>Dated: {1}",
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(),
System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToShortDateString());
Ответ 3
Я использую .NET 2.0 и 3.5, и он может устанавливать как номер сборки, так и дату сборки. В то время как панель справки говорит, что, если она еще не установила .NET, она будет использовать случайное число для пересмотра, что неверно, оно фактически позволяет легко получить информацию о дате/времени, что подтверждается онлайн-документами:
http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx
Смотрите этот блог:
http://dotnetfreak.co.uk/blog/archive/2004/07/08/determining-the-build-date-of-an-assembly.aspx?CommentPosted=true#commentmessage
Я хочу установить версию сборки самостоятельно, но все равно хочу автоматическую печать даты/времени, поэтому я использую что-то вроде этого для
AssemblyVersion ( "1,0. *" )
Вот примерная функция для извлечения даты/времени сборки
private System.DateTime BuildDate()
{
//This ONLY works if the assembly was built using VS.NET and the assembly version attribute is set to something like the below. The asterisk (*) is the important part, as if present, VS.NET generates both the build and revision numbers automatically.
//<Assembly: AssemblyVersion("1.0.*")>
//Note for app the version is set by opening the 'My Project' file and clicking on the 'assembly information' button.
//An alternative method is to simply read the last time the file was written, using something similar to:
//Return System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly.Location)
//Build dates start from 01/01/2000
System.DateTime result = DateTime.Parse("1/1/2000");
//Retrieve the version information from the assembly from which this code is being executed
System.Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
//Add the number of days (build)
result = result.AddDays(version.Build);
//Add the number of seconds since midnight (revision) multiplied by 2
result = result.AddSeconds(version.Revision * 2);
//If we're currently in daylight saving time add an extra hour
if (TimeZone.IsDaylightSavingTime(System.DateTime.Now, TimeZone.CurrentTimeZone.GetDaylightChanges(System.DateTime.Now.Year)))
{
result = result.AddHours(1);
}
return result;
}
Ответ 4
Вы можете получить дату сборки сборки через отражение, проверьте следующие примеры: