указать дату сборки - PullRequest
       21

указать дату сборки

4 голосов
/ 09 июля 2009

У меня есть приложение C # WinForms с окном About. Я помещаю номер версии в поле about, используя:

FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location)
    .FileVersion

В итоге я получаю номер ревизии Subversion, из которого был создан исполняемый файл.

Я также хотел бы получить дату сборки в поле О программе. Я попробовал:

File.GetLastWriteTime(Assembly.GetEntryAssembly().Location)

Но это дает мне дату записи исполняемого файла, которая соответствует только дате, когда приложение было установлено (мы используем ClickOnce), а не встроено .

Как я могу получить дату сборки ?

Ответы [ 7 ]

5 голосов
/ 09 июля 2009

Если вы используете автоматическое управление версиями, вы можете преобразовать последние два бита номера версии в дату сборки: MSDN

2 голосов
/ 09 июля 2009

Мы используем этот очень похожий фрагмент кода:

DateTime buildDate = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime;

и я почти уверен, что это не изменится при установке из ClickOnce .. Если я ошибаюсь, поправьте меня!

1 голос
/ 09 июля 2009

Вы можете изменить версию вашей сборки, чтобы закодировать дату, но это, вероятно, означало бы потерю информации о вашей версии Subversion, что, возможно, более полезно.

Это должно сработать: запишите текущую дату / время в файл .cs как задачу перед сборкой, например так:

[assembly: AssemblyCreated(CreatedDate = new DateTime(...))]

Для этого вы можете использовать командный файл, сценарий PowerShell или исполняемый файл.

Включите файл в ваш проект (действие по сборке: скомпилируйте) и включите пользовательский атрибут:

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public sealed class AssemblyCreatedAttribute : Attribute
{
    public DateTime CreatedDate { get; set; }
}

При запуске приложения вы можете использовать отражение, чтобы получить пользовательский атрибут из сборки для отображения на странице about.

0 голосов
/ 09 июля 2009

В проектах Visual Studio есть файл AssemblyInfo.cs, но вы можете использовать любой другой файл .cs. Посмотрите на атрибут AssemblyVersion:

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number 
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.*")]

Теперь вы можете вычислить дату сборки, используя свойство Version.Build . Значение, которое возвращает Version.Build, - это количество дней, прошедшее с тех пор: 2000/1/1

0 голосов
/ 09 июля 2009
Assembly.GetExecutingAssembly().GetName().Version.ToString();

Из моего собственного C # кода .

0 голосов
/ 09 июля 2009

Я не думаю, что существует стандартный способ сделать это, но вы можете свернуть что-нибудь сами. Создайте пользовательский атрибут уровня сборки, присвойте ему классное имя, например «AssemblyDateAttribute». Пусть он возьмет строку, которую вы можете проанализировать в DateTime в конструкторе, который доступен через свойство.

В рамках процесса сборки создайте новый файл с использованием только того атрибута, который применяется к сборке. (Сделайте так, чтобы он выглядел как AssemblyInfo.cs), а затем включите его во входные данные сборки.

Затем в вашем окне about найдите в вашей сборке экземпляры этого атрибута и отобразите значение даты в вашем окне.

0 голосов
/ 09 июля 2009

Единственный способ, которым я смог сделать это в C / C ++, - это на самом деле заставить процесс пост-сборки выполнять поиск и замену специальной строки, выделенной как «статическая константа» в двоичном файле.

Хотя в c # может быть более простой способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...