MSBuild выводит неправильный формат DateTime.UtcNow - PullRequest
0 голосов
/ 09 января 2020

Для моего тега Version в csproj у меня есть следующее:

    <PropertyGroup>
        <Version>
            $([System.DateTime]::UtcNow.Year).$([System.DateTime]::UtcNow.ToString("MM")).$([System.DateTime]::UtcNow.ToString("dd")).$([System.DateTime]::UtcNow.ToString("HHmm"))
        </Version>
    </PropertyGroup>

Но выводится примерно так: Vysn.Voice.2020.1.9.309.nupkg для пакетов nuget и когда я получаю информацию о версии из сборки: Assembly.GetExecutingAssembly().GetName().Version.

Но когда я делаю

var assembly = Assembly.GetExecutingAssembly();
            var informationalVersionAttribute = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();

Console.WriteLine(informationalVersionAttribute.InformationalVersion);

Он выводит правильную строку DateTime: 2020.01.08.1018. Я не уверен, что делаю что-то не так при указании версии, но хочу, чтобы она правильно выводила версию: 2020.MM.dd.HHmm.

1 Ответ

1 голос
/ 09 января 2020

Но выводится примерно так: Vysn.Voice.2020.1.9.309.nupkg для пакетов nuget

Это поведение по своему замыслу.

  1. Прежде всего, Vysn.Voice - это так называемый идентификатор пакета , а 2020.1.9.309 - версия пакета . Как описывает официальный документ :

    Специфический пакет c всегда упоминается с использованием его идентификатора пакета и точного номера версии

    • По умолчанию версия пакета соответствует Version. В результате вы можете изменить версию пакета, настроив элемент <Version/> в *.csproj. Имейте в виду, версия пакета НЕ повлияет на идентификатор пакета .
    • По умолчанию идентификатор пакета совпадает с метаданными <PackageId>Vysn.Voice</PackageId> в файле *.csproj. Если <PackageId/> не указан или пуст, он будет использовать AssemblyName. Для получения дополнительной информации см. Идентификатор пакета .
  2. Также обратите внимание, что номер версии в <Major>.<Minor>.<Build> должен быть Integer. А когда проект упакован с использованием NuGet, начальные нули в номерах версий всегда удаляются из частей Major, Minor и Build. Таким образом, вместо 2020.01.09, вы получите 2020.1.9. Это поведение задокументировано здесь .

  3. Наконец, когда вы вызываете

    assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
    

    , вы фактически пытаетесь получить InformationalVersion, что отличается от Version или PackageVersion. InformationalVersion может содержать любую строку . Это InformationalVersion соответствует Version по умолчанию и может выглядеть как 2020.01.09.0704 (обратите внимание, что будут некоторые начальные нули.)

...