相当于dotnet core/csproj中的AssemblyInfo

hul*_*ist 199 assemblyinfo visual-studio .net-core visual-studio-2017

由于dotnet核心移回到.csproj格式,因此有一个新的自动生成MyProject.AssemblyInfo.cs,其中包含.

[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]
Run Code Online (Sandbox Code Playgroud)

请注意,每次构建时都会自动重新生成.以前该文件位于/ obj /目录中,现在它似乎只在内存中,因为在磁盘上找不到该文件并且单击错误消息不会打开任何文件.

这是错误消息: 在此输入图像描述

由于它们在那里定义,我无法在经典中定义它们AssemblyInfo.cs.

我在哪里/如何定义项目的公司和版本?

nat*_*ter 277

正如您已经注意到的,您可以在.csproj中控制大多数这些设置.

如果您希望将它们保存在AssemblyInfo.cs中,则可以关闭自动生成的程序集属性.

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 
Run Code Online (Sandbox Code Playgroud)

如果你想看看幕后发生了什么,请查看Microsoft.NET.Sdk中的Microsoft.NET.GenerateAssemblyInfo.targets.

  • 很高兴看到我可以拒绝这件事.叫我老式,但我更喜欢旧的AssemblyInfo.cs文件,而不是自动生成的.netcore.此外,我使用外部工具来管理我的版本和其他AssembyInfo条目的内容.我试图使用自定义目标将我的属性保留在项目本身之外,但它让我窒息了一段时间. (34认同)
  • @Shubhan这不是自动生成的属性之一.在项目的某处创建一个空的.cs文件,并向其中添加InternalsVisibleTo代码 (7认同)
  • NuGet不读取AssemblyInfo.cs.您仍然必须使用MSBuild属性来定义NuGet包版本. (4认同)
  • 自动生成文件时,如何以新的csproj格式设置InternalsVisibleTo属性? (4认同)
  • @PandaWood 有很多充分的理由“坚持”AssemblyInfos。首先,它们更容易共享和编辑。如果是新的一年,并且我需要更改“版权”属性上的日期,或者如果我决定更改“公司”属性中的文本等,我不想单独打开数百个项目或数十个解决方案来这样做,我也不想手动编辑 .csproj 文件。使用 AssemblyInfo,这很容易 - Shared.AssemblyInfo.cs,作为链接添加到 IDE UI 中。每一次尝试解决新的做事方式都比这更困难,而且浪费了开发时间。 (3认同)
  • @BittermanAndy 但是 @PandaWood 已经告诉你可以使用 `Directory.build.props` ,它比你的解决方案更有优势,因为你不必修改*每个*项目来添加这个 Shared.AssemblyInfo.cs 文件作为链接。您不必教开发人员在创建新项目并在代码审查时检查它时应该添加它。它自动适用于所有当前和新项目。什么都不做比必须记住修改 csproj 更“难”。 (3认同)

hul*_*ist 107

这些设置已移至.csproj文件中.

默认情况下,它们不会显示,但您可以在项目属性Package选项卡中从Visual Studio 2017中发现它们 .

项目属性,选项卡包

保存后,可以在中找到这些值 MyProject.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <Version>1.2.3.4</Version>
    <Authors>Author 1</Authors>
    <Company>Company XYZ</Company>
    <Product>Product 2</Product>
    <PackageId>MyApp</PackageId>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <FileVersion>3.0.0.0</FileVersion>
    <NeutralLanguage>en</NeutralLanguage>
    <Description>Description here</Description>
    <Copyright>Copyright</Copyright>
    <PackageLicenseUrl>License URL</PackageLicenseUrl>
    <PackageProjectUrl>Project URL</PackageProjectUrl>
    <PackageIconUrl>Icon URL</PackageIconUrl>
    <RepositoryUrl>Repo URL</RepositoryUrl>
    <RepositoryType>Repo type</RepositoryType>
    <PackageTags>Tags</PackageTags>
    <PackageReleaseNotes>Release</PackageReleaseNotes>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

在文件资源管理器属性信息选项卡中,FileVersion显示为"文件版本"并Version显示为"产品版本"

  • 我正在使用类库(.NET Standard),并在“程序包”选项卡中看到它。你看到那里了吗?一旦“保存”默认值以外的内容,它将显示在csproj中。 (2认同)
  • 使用“软件包”标签时,如何使用通配符(如1.0。*。*)? (2认同)

pfx*_*pfx 89

我为.NET Standard 2.0项目执行以下操作.

创建一个Directory.Build.props文件(例如,在repo的根目录中),并将要从.csproj文件共享的属性移动到此文件中.

MSBuild将自动将其拾取并将其应用于自动生成AssemblyInfo.cs.

dotnet pack在Visual Studio 2017中使用或通过UI 构建nuget包时,它们也会应用于nuget包.

请参阅https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build

  • 这应该得到更多的赞成,很高兴允许自动生成但仍然在整个解决方案中共享一些东西 (9认同)
  • @Justin,您不会在项目文件中看到它们;它们应用于生成的程序集。 (2认同)
  • 我们这些不使用 msbuild 的人呢? (2认同)
  • 为我工作过 .Net 6 和 VS 2022。 (2认同)

Nig*_*888 46

您可以随时添加自己的AssemblyInfo.cs,它可以派生用InternalsVisibleToAttribute,也可以添加CLSCompliantAttribute其他非自动生成的.

将AssemblyInfo.cs添加到项目中

  1. 在Solution Explorer中,右键单击<project name> > Add > New Folder.

添加新文件夹

  1. 将文件夹命名为"属性".

名称文件夹属性

  1. 右键单击"Properties"文件夹,然后单击Add > New Item....

添加新项目

  1. 选择"Class"并将其命名为"AssemblyInfo.cs".

名称文件AssemblyInfo.cs

抑制自动生成的属性

如果要将属性移回AssemblyInfo.cs而不是自动生成它们,可以在MSBuild中将它们抑制为natemcmaster在其答案中指出的.

  • 我会避免假设这些天的每个人都拥有Visual Studio,可以使用其他编辑器来使某些人很难回答这个问题(例如,我在使用Jetbrains Rider的Mac / Mono上执行此操作) (2认同)
  • 有时,新的 Microsoft 领导应该考虑保留与 AssemblyInfo.cs 配合良好的内容,以便自动化构建仍然可以修改构建编号。 (2认同)
  • 如果您像我一样希望避免仅为InternalsVisibleToAttribute创建自己的AssemblyInfo.cs,那么有一种方法,正如@meziantou在他的博客文章中所写的https://www.meziantou.net/declaring-internalsvisibleto-in-the-csproj .htm (2认同)

dat*_*ung 8

添加到 NightOwl888 的答案,您可以更进一步,添加一个AssemblyInfo类而不仅仅是一个普通类:

在此处输入图片说明

  • 当我在 VS2019 中为 netstandard 1.1 项目打开此对话框时,没有“程序集信息文件”。 (5认同)

T.S*_*.S. 7

我想用以下内容扩展这个主题/答案。正如有人提到的,这个自动生成的AssemblyInfo可能是外部工具的障碍。就我而言,使用FinalBuilder 时,我遇到了一个问题,即构建操作未更新AssemblyInfo。显然,FinalBuilder依赖于~projfile 来查找AssemblyInfo 的位置。我想,它正在寻找项目文件夹下的任何地方。不。所以,改变这个

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 
Run Code Online (Sandbox Code Playgroud)

只完成了一半的工作,如果由 VS IDE/MS Build 构建,它允许自定义程序集信息。但我需要FinalBuilder也能做到,而无需手动操作装配信息文件。我需要满足所有程序,MSBuild/VS 和 FinalBuilder。

我通过向现有的条目添加一个条目来解决这个问题 ItemGroup

<ItemGroup>
   <Compile Remove="Common\**" />
   <Content Remove="Common\**" />
   <EmbeddedResource Remove="Common\**" />
   <None Remove="Common\**" />
   <!-- new added item -->
   <None Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

现在,有了这个项目,FinalBuilder 会找到AssemblyInfo 的位置并修改文件。虽然操作None允许 MSBuild/DevEnv 忽略此条目,并且不再报告基于Compile通常与proj文件中的程序集信息条目一起出现的操作的错误。

C:\Program Files\dotnet\sdk\2.0.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.targets(263,5): 错误:包含重复的“编译”项目。默认情况下,.NET SDK 包括项目目录中的“编译”项。您可以从项目文件中删除这些项目,或者如果您想将它们明确包含在项目文件中,则将“EnableDefaultCompileItems”属性设置为“false”。有关更多信息,请参阅https://aka.ms/sdkimplicititems。重复项是:'AssemblyInfo.cs'