获取.Net Core 3.1 单文件可执行版本号

Posted

技术标签:

【中文标题】获取.Net Core 3.1 单文件可执行版本号【英文标题】:Get .Net Core 3.1 single-file executable version number 【发布时间】:2020-06-02 17:14:41 【问题描述】:

我有一个已发布为单个文件可执行文件的 .Net Core 应用程序。当我在 Visual Studio 中运行以下任何代码时,我得到了预期的结果:

Assembly.GetAssembly(typeof(Installer)).GetName().Version.ToString();
Assembly.GetEntryAssembly().GetName().Version.ToString();
Assembly.GetExecutingAssembly().GetName().Version.ToString();

但是当上述代码在已发布的应用程序(生产中)中运行时,它总是返回“0.0.0.0”

【问题讨论】:

【参考方案1】:

你试过了吗?我创建了一个新项目,它似乎工作。

假设您使用的是 Visual Studio 2019。

    右键项目->添加->新建项目->装配信息文件 然后您将拥有一个 AssemblyInfo.cs 文件,其中包含程序集版本 然后您需要忽略生成的程序集版本,因此您需要将带有 false 的 GenerateAssemblyInfo 添加到您的 .csproj。

    右键项目 -> 编辑项目文件 -> 添加 GenerateAssemblyInfo 元素,如下所示:

    <Project Sdk="Microsoft.NET.Sdk.Web">
       <PropertyGroup>
          <TargetFramework>netcoreapp3.1</TargetFramework>
          <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
       </PropertyGroup>
    </Project>
    

【讨论】:

【参考方案2】:

程序集版本应在您正在编译的项目的属性中设置。

右键项目->属性->包:

【讨论】:

正如我在原始问题中所述,当我“从 Visual Studio 中以调试模式执行代码时,我得到了预期的结果”。因此,我相信我已经正确设置了版本号。顺便说一句,我使用了 Shoejep 建议的方法。我认为挑战与设置版本号无关,而是在应用程序作为独立的单文件可执行文件发布时检索版本号。当发布为独立的单文件可执行文件时,查询版本号的标准方法似乎不起作用。 此外,当我在 Windows 资源管理器中打开 DLL 和可执行文件并查看文件的详细信息时,正确的版本号就在那里......所以再说一次,这不是我没有设置版本号正确。

以上是关于获取.Net Core 3.1 单文件可执行版本号的主要内容,如果未能解决你的问题,请参考以下文章

如何验证.net core安装成功

在 .NET Core 3.1 中执行存储过程

Serilog Net Core 3.1 不创建任何日志文件

.NET Core 3.1 并且无法加载文件或程序集 System.Data.Entity,版本 = 4.0.0.0

在VS2019 / .Net Core 3.1中使用“生产单个文件”发布选项时,是否可以保持appsettings.json可编辑的后期部署?

在 VS2019 中使用 .Net Core 格式的项目文件时如何自动增加包版本修订号