如何在二进制文件上将 AssemblyVersion 标记为 FileVersion

Roh*_*rma 7 .net c# version .net-core

我正在使用从当前日期/时间生成版本号的 Roslyn 功能。

我可以看到自动生成的基于日期/时间的版本号被正确标记为 AssemblyVersion,我可以在运行时使用 API 读取它。

问题:如何获得标记为文件版本的相同自动生成的基于日期时间的版本号,以便我可以右键单击 Windows 资源管理器中的程序集并查看“详细信息”选项卡下的“文件版本”

我看到当我明确标记版本号(比如 1.2.3.4)时它工作正常,但不是自动生成的

我没有使用 AssemblyInfo.cs 并希望在 .csproj 中设置属性

在此处输入图片说明

我正在使用 dotnet cli 使用以下 csproj 进行构建,例如:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <AssemblyVersion>1.0.*</AssemblyVersion>
    <FileVersion>1.0.*</FileVersion>
    <Deterministic>false</Deterministic>
    <PackageId>Demo</PackageId>
    <Company>My Company</Company>
    <Copyright>Copyright © Xyzzy 2020</Copyright>
    <Description>Description</Description>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <GenerateAssemblyInfo>true</GenerateAssemblyInfo>
    <GenerateAssemblyFileVersionAttribute>true</GenerateAssemblyFileVersionAttribute>
    <GenerateAssemblyTitleAttribute>true</GenerateAssemblyTitleAttribute>
    <GenerateAssemblyConfigurationAttribute>true</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>true</GenerateAssemblyProductAttribute>
    <GenerateAssemblyCopyrightAttribute>true</GenerateAssemblyCopyrightAttribute>
    <GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
    <GenerateAssemblyInformationalVersionAttribute>true</GenerateAssemblyInformationalVersionAttribute>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

Ili*_*hev 6

根据Microsoft.NET.GenerateAssemblyInfo.targets项目,如果您不指定FileVersion属性并设置GenerateAssemblyFileVersionAttribute为,falseFileVersion属性值将等于AssemblyVersion属性。

\n\n

尝试像这样修改您的 csproj 文件:

\n\n
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n\n    <AssemblyVersion>1.0.*</AssemblyVersion>\n\n    <!-- Comment or delete this line. -->\n    <!-- <FileVersion>1.0.*</FileVersion> -->\n\n    <Deterministic>false</Deterministic>\n    <PackageId>Demo</PackageId>\n    <Company>My Company</Company>\n    <Copyright>Copyright \xc2\xa9 Xyzzy 2020</Copyright>\n    <Description>Description</Description>\n    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>\n    <GenerateAssemblyInfo>true</GenerateAssemblyInfo>\n\n    <!-- Set this attribute to false. -->\n    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>\n\n    <GenerateAssemblyTitleAttribute>true</GenerateAssemblyTitleAttribute>\n    <GenerateAssemblyConfigurationAttribute>true</GenerateAssemblyConfigurationAttribute>\n    <GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute>\n    <GenerateAssemblyProductAttribute>true</GenerateAssemblyProductAttribute>\n    <GenerateAssemblyCopyrightAttribute>true</GenerateAssemblyCopyrightAttribute>\n    <GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>\n    <GenerateAssemblyInformationalVersionAttribute>true</GenerateAssemblyInformationalVersionAttribute>\n  </PropertyGroup>\n</Project>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这种方法对我有用。对 csproj 文件进行上述更改后,我可以FileVersion在文件属性窗口中看到。

\n