如何在二进制文件上将 AssemblyVersion 标记为 FileVersion
How do I get AssemblyVersion stamped as FileVersion on the binary
我正在使用 generating version number from current date/time 的 Roslyn 功能。
我可以看到自动生成的基于 date/time 的版本号被正确标记为 AssemblyVersion,我可以在运行时使用 API 读取它。
问题:如何获得相同的自动生成的基于日期时间的版本号标记为 file version,以便我可以在 windows 资源管理器中右键单击程序集并查看 "File Version" 在详细信息选项卡下
我看到当我明确标记版本号(比如 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>
在 AssemblyInfo.cs 文件中,您可以设置文件属性(在“详细信息”选项卡下),例如文件描述和文件版本:
[assembly: AssemblyDescription("Scratch")]
[assembly: AssemblyFileVersion("1.2.3.4")]
不同的AssemblyFile属性如下:
FileVersionInfo.Comments = 程序集描述
FileVersionInfo.CompanyName = 组装公司
FileVersionInfo.FileDescription = 程序集标题
FileVersionInfo.FileVersion = AssemblyFileVersion
FileVersionInfo.LegalCopyright = 大会版权
FileVersionInfo.LegalTrademarks = 大会商标
FileVersionInfo.ProductName = 组装产品
FileVersionInfo.ProductVersion = AssemblyInformationalVersion
注:
-
Specifies the version of the assembly being attributed.
-
Instructs a compiler to use a specific version number for the Win32 file version resource. The Win32 file version is not required to be the same as the assembly's version number.
-
Defines additional version information for an assembly manifest.
另请注意,文件版本号实际上位于 DLL 文件的末尾。在文本编辑器中打开 DLL,然后滚动到最后,在倒数第二行的末尾:
cbff18129f3 NUL NUL FF SOH NUL BEL 1.0.0.0 NUL NUL SOH NUL
您可以在文本文件中更改版本,但这不起作用,它会保留旧版本。 您可以通过在 AssemblyInfo.cs
中设置 AssemblyFileVersion 之前和之后执行 WinDiff / DiffMerge 来找出版本号上的二进制锁是什么
根据 Microsoft.NET.GenerateAssemblyInfo.targets
项目,如果您未指定 FileVersion
属性 并将 GenerateAssemblyFileVersionAttribute
设置为 false
,则 FileVersion
属性 值将等于 AssemblyVersion
属性.
尝试像这样修改您的 csproj 文件:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<AssemblyVersion>1.0.*</AssemblyVersion>
<!-- Comment or delete this line. -->
<!-- <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>
<!-- Set this attribute to false. -->
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyTitleAttribute>true</GenerateAssemblyTitleAttribute>
<GenerateAssemblyConfigurationAttribute>true</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>true</GenerateAssemblyProductAttribute>
<GenerateAssemblyCopyrightAttribute>true</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>true</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>
</Project>
这种方法对我有用。对 csproj 文件进行上述更改后,我能够在文件属性 window.
中看到 FileVersion
我正在使用 generating version number from current date/time 的 Roslyn 功能。
我可以看到自动生成的基于 date/time 的版本号被正确标记为 AssemblyVersion,我可以在运行时使用 API 读取它。
问题:如何获得相同的自动生成的基于日期时间的版本号标记为 file version,以便我可以在 windows 资源管理器中右键单击程序集并查看 "File Version" 在详细信息选项卡下
我看到当我明确标记版本号(比如 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>
在 AssemblyInfo.cs 文件中,您可以设置文件属性(在“详细信息”选项卡下),例如文件描述和文件版本:
[assembly: AssemblyDescription("Scratch")]
[assembly: AssemblyFileVersion("1.2.3.4")]
不同的AssemblyFile属性如下:
FileVersionInfo.Comments = 程序集描述
FileVersionInfo.CompanyName = 组装公司
FileVersionInfo.FileDescription = 程序集标题
FileVersionInfo.FileVersion = AssemblyFileVersion
FileVersionInfo.LegalCopyright = 大会版权
FileVersionInfo.LegalTrademarks = 大会商标
FileVersionInfo.ProductName = 组装产品
FileVersionInfo.ProductVersion = AssemblyInformationalVersion
注:
-
Specifies the version of the assembly being attributed.
-
Instructs a compiler to use a specific version number for the Win32 file version resource. The Win32 file version is not required to be the same as the assembly's version number.
-
Defines additional version information for an assembly manifest.
另请注意,文件版本号实际上位于 DLL 文件的末尾。在文本编辑器中打开 DLL,然后滚动到最后,在倒数第二行的末尾:
cbff18129f3 NUL NUL FF SOH NUL BEL 1.0.0.0 NUL NUL SOH NUL
您可以在文本文件中更改版本,但这不起作用,它会保留旧版本。 您可以通过在 AssemblyInfo.cs
中设置 AssemblyFileVersion 之前和之后执行 WinDiff / DiffMerge 来找出版本号上的二进制锁是什么根据 Microsoft.NET.GenerateAssemblyInfo.targets
项目,如果您未指定 FileVersion
属性 并将 GenerateAssemblyFileVersionAttribute
设置为 false
,则 FileVersion
属性 值将等于 AssemblyVersion
属性.
尝试像这样修改您的 csproj 文件:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<AssemblyVersion>1.0.*</AssemblyVersion>
<!-- Comment or delete this line. -->
<!-- <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>
<!-- Set this attribute to false. -->
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyTitleAttribute>true</GenerateAssemblyTitleAttribute>
<GenerateAssemblyConfigurationAttribute>true</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>true</GenerateAssemblyProductAttribute>
<GenerateAssemblyCopyrightAttribute>true</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>true</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>
</Project>
这种方法对我有用。对 csproj 文件进行上述更改后,我能够在文件属性 window.
中看到FileVersion