发布win10-x64运行时的应用程序,dll获取VersionInfo.cs文件信息,可执行文件没有,为什么?

时间:2018-06-08 14:51:10

标签: c# .net .net-core

我正在发布这样的dotnet核心应用程序:

call dotnet publish MyApp.csproj -c Release -o "%scriptDir%\..\dist\Publish\MyApp" -r win10-x64

我的“.csproj”文件包含此(VersionInfo.cs文件):

  <ItemGroup>
    <Compile Include="..\VersionInfo.cs" Exclude="bin\**;obj\**;**\*.xproj;packages\**" />
  </ItemGroup>

它包含以下信息:

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyCompany("My Company")]
[assembly: AssemblyCopyright("Copyright © My Company 2018")]
[assembly: AssemblyTrademark("My Company")]

在输出“ MyApp.dll ”中获取所有信息(文件属性中设置的版本,公司名称等)。 但生成的运行时可执行文件“ MyApp.exe ”没有任何版本信息:(。

  • 为什么它不包含与DLL相同的信息?
  • 如何从“VersionFile.cs”文件添加该信息,该信息是为指定的运行时可执行文件设置的?

2 个答案:

答案 0 :(得分:1)

在项目文件中包含汇编信息的方法要简单得多。

<PropertyGroup>
    <AssemblyVersion>1.0</AssemblyVersion>
    <FileVersion>1.0.0.0</FileVersion>
    <Company>My Company</Company>
    <Copyright>Copyright © My Company 2018</Copyright>
    <Trademark>My Company</Trademark>
</PropertyGroup>

作为示例,您可以查看Newtonsoft.Json project file

Here您可以找到有关.NET Core exe文件如何工作的一些讨论。

总体:

  • .NET Core不支持exe文件,只生成dll
  • 如果在发布期间指定运行时标识符,则将生成本机主机(用于Windows的exe)以引导特定操作系统的托管dll

答案 1 :(得分:0)

我能够通过将.csproj中的GenerateAssemblyInfo标签设置为true来解决此问题。

<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <OutputType>WinExe</OutputType>
    <GenerateAssemblyInfo>true</GenerateAssemblyInfo> <!-- this was false -->
...
  </PropertyGroup>