ASP.NET - показывать дату / информацию о сборке приложения внизу экрана - PullRequest
27 голосов
/ 27 ноября 2008

У меня есть веб-приложение asp.net, которое имеет несколько версий, развернутых на разных клиентских серверах в своих сетях. У нас есть одна практика - делать скриншоты по электронной почте, когда у них возникают проблемы.

В старые дни asp.net 1.1 мы могли получить информацию о сборке DLL, используя отражение, и показать информацию о дате сборки и нумерации на экране в тонком месте.

В .NET 2.0 и выше модель сборки изменилась, и этот механизм больше не работает. Я слышал о различных системах сборки, но я действительно ищу самый простой способ, на платформе 3.5, сделать то, что эта функциональность сделала на платформе 1.1.

  1. Каждый раз, когда выполняется сборка, обновляйте дату / время сборки и каким-либо образом обновляйте номер сборки
  2. Уметь видеть время и номер сборки, отображать на экране
  3. быть максимально простым в реализации

Ответы [ 4 ]

36 голосов
/ 24 марта 2009

Я выбрал просто использовать дату выполнения сборки. То, как я публикую файлы, работает нормально.

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());
18 голосов
/ 27 ноября 2008

Мы используем .Net 2.0 и извлекаем информацию о версии из сборки. Возможно, не идеально, но мы используем описание для хранения даты сборки.

Assembly assembly = Assembly.GetExecutingAssembly();
string version = assembly.GetName().Version.ToString();
string buildDate = ((AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
    assembly, typeof(AssemblyDescriptionAttribute))).Description;

Процесс сборки использует задачу asminfo nant для создания файла 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>
17 голосов
/ 19 декабря 2008

Я использую .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;

}
7 голосов
/ 27 ноября 2008

Вы можете получить дату сборки сборки через отражение, проверьте следующие примеры:

...