【问题标题】:Is AssemblyInfo.cs file needed for .Net Core projects?.Net Core 项目是否需要 AssemblyInfo.cs 文件?
【发布时间】:2021-07-11 11:56:56
【问题描述】:

我已将 Asp.Net 框架中的 WPF 项目迁移到 Asp.Net 核心中。现有的 .net 项目在属性文件夹中有 AssemblyInfo.cs。使用 “dotnet new wpf” 创建新的 WPF 项目时。 AssemblyInfo.cs 文件被添加。

.Net framework 中的 AssemblyInfo.cs 包含所有信息,但 dot net core 中的没有任何信息

计划删除为核心创建的新项目,因为构建问题为“重复的 ThemeInfo 属性”,并禁用使用在 csproj 中添加以下属性从 .Net 框架迁移的旧项目

<ItemGroup>   
   <Compile Remove="Properties\AssemblyInfo.cs" />   
</ItemGroup>   
<ItemGroup>   
  <None Include="Properties\AssemblyInfo.cs" />   
</ItemGroup> 

需要知道 Net core 项目是否需要这样做。

【问题讨论】:

    标签: c# wpf assemblyinfo


    【解决方案1】:

    AssemblyInfo.cs 很有用,但不是必需的。

    在 .NetCore 中,您可以从 csproj 文件而不是 AssemblyInfo 管理程序集信息。该文件将在 obj 文件夹中为您自动生成。您需要做的就是在 csproj 文件中设置它们:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <AssemblyName>myAppName</AssemblyName>
      </PropertyGroup>
    </Project>
    

    如果您的项目中存在带有任何属性集的 AssemblyInfo,编译器将抱怨属性重复。在这种情况下,您应该将 GenerateAssemblyInfo 设置为 false(这样它就不会在 obj 文件夹中自动生成 x.AssemblyInfo.cs):

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
        <AssemblyName>myAppName</AssemblyName>
      </PropertyGroup>
    </Project>
    

    您可以选择手动处理程序集信息,但将自动生成属性设置为 false(例如 GenerateAssemblyInfoGenerateAssemblyTitleAttribute 等),这意味着您可以在 both 中设置程序集信息AssemblyInfo 和 csproj。当您想在不同项目之间共享一组通用信息,同时能够更改每个项目中的一些信息时,这会派上用场。 (虽然你不能设置一个属性两次,但这仍然是一个有用的功能)


    附注:既然您已经迁移到 .NetCore,那么如果您还没有这样做的话,不妨将您的 csproj 迁移到 Project SDK 格式。然后你会注意到很多杂乱的东西从 csproj 中消失了,使它更具可读性和更易于维护,更多地关注那些提到的属性。

    在经典 .Net 应用程序中有一种方法可以做同样的事情:https://github.com/dasMulli/AssemblyInfoGenerationSdk

    【讨论】:

    • 好的,谢谢,我可以从我提到的编译中排除 assemblyInfo 文件,并在 false1.0 等 csproj 文件中添加程序集属性,例如 assemblyversion 和 assemblyfileversion。 0.01.0.0.0。对吗?
    • @KarthicG 是的,你可以,而且在这种情况下你不需要设置GenerateAssemblyInfo。让它默认自动生成。
    • 我们如何检查自动生成?
    • @KarthicG 正如我提到的,该文件是在 obj 文件夹中生成的,其名称类似于 x.AssemblyInfo.cs
    • 不添加这个 GenerateAssemblyInfo,得到错误
    【解决方案2】:

    当您将项目从 .NET Framework 升级到 .NET Core 或 .NET 5 或 .NET 6 时,应删除属性/AssemblyInfo.cs。如您所见,否则会出现构建错误。相反,那里的信息现在应该直接存储在 .csproj 文件中。

    【讨论】:

    • 我没有在任何文档中看到提到这一点。 AFAIK AssemblyInfo 仍然是一个有效选项,因为自动生成的程序集信息也是默认选项。
    • 对我来说似乎不是这样,我在执行转换时阅读的所有内容都说明您应该删除 AssemblyInfo 并将这些值存储在 csproj 文件中。如果您想在不同的 csproj 文件之间共享通用值,那么拥有 Directory.Build.props 文件是 IMO 的方式。
    • 我认为你弄错了@贾斯汀。这是一个选择。您可以从 csproj 自动生成 assemblyinfo,也可以选择保留 assemblyinfo 而不是自动生成它。
    • @Justin yes Directory.Build.props 是一种干净的方式。但重要的是要知道 AssemblyInfo 是 .net 在程序集中设置这些信息的方式。自.NetFx 以来它没有改变。唯一改变的是它现在默认自动生成(您可以设置为不自动生成)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2019-07-29
    • 2022-11-11
    相关资源
    最近更新 更多