由于dotnet核心移回了.csproj格式,有了一个新的自动生成的MyProject.AssemblyInfo.cs,其中包括:

[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]

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

这是错误信息:

因为它们是在那里定义的,所以我不能自己在经典的AssemblyInfo.cs中定义它们。

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


这些设置已经移动到.csproj文件中。

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

保存后,可以在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>

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

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

如果希望将这些属性保留在AssemblyInfo.cs中,可以关闭自动生成的程序集属性。

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

如果您想了解底层发生了什么,请在Microsoft.NET.Sdk中签出Microsoft.NET.GenerateAssemblyInfo.targets。

您总是可以添加自己的AssemblyInfo.cs,这对于InternalsVisibleToAttribute、CLSCompliantAttribute和其他不是自动生成的属性非常方便。

将AssemblyInfo.cs添加到项目

在解决方案资源管理器中,右键单击<项目名称> >添加>新建文件夹。

命名文件夹为Properties。

右键单击“属性”文件夹,然后单击添加>新项目....

选择“Class”并将其命名为“AssemblyInfo.cs”。

抑制自动生成的属性

如果您希望将属性移回AssemblyInfo.cs,而不是让它们自动生成,您可以在MSBuild中抑制它们,正如natemcmaster在他的回答中指出的那样。

我想用以下内容扩展这个话题/回答。正如有人提到的,这个自动生成的AssemblyInfo可能会成为外部工具的障碍。在我使用FinalBuilder的情况下,我遇到了一个问题,即AssemblyInfo没有通过构建操作得到更新。显然,FinalBuilder依赖于~proj文件来查找AssemblyInfo的位置。我以为它在项目文件夹下的任何地方。不。所以,改变这个

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

只做了一半的工作,它允许自定义组装信息,如果用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>

现在,有了这个项,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): error : Duplicate 'Compile' items were included. The .NET SDK includes 'Compile' items from your project directory by default. You can either remove these items from your project file, or set the 'EnableDefaultCompileItems' property to 'false' if you want to explicitly include them in your project file. For more information, see https://aka.ms/sdkimplicititems. The duplicate items were: 'AssemblyInfo.cs'

我为我的. net标准2.0项目做以下工作。

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

这也支持在多项目解决方案中集中管理这些共享属性,例如允许为所有项目只设置一次版权和/或版本号。

MSBuild将自动拾取并将它们应用到自动生成的AssemblyInfo.cs中。

当使用dotnet包或通过Visual Studio 2017的UI构建一个nuget包时,它们也会应用到nuget包中。

参见https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-your-build

例子:

<Project>
    <PropertyGroup>
        <Company>Some company</Company>
        <Copyright>Copyright © 2020</Copyright>
        <AssemblyVersion>1.0.0.1</AssemblyVersion>
        <FileVersion>1.0.0.1</FileVersion>
        <Version>1.0.0.1</Version>
        <!-- ... -->
    </PropertyGroup>
</Project>

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

在。net 5+中,你可以使用AssemblyMetadata:

<AssemblyMetadata include=“bar” value=“baz” />

谢谢,这对我帮助很大。

在我的案例中,构建Blazor服务器端网站的项目在发布和调试上都是成功的,但发布网站仍然失败,出现了重复属性错误,这让我有点困惑。

解决方案是在.csproj和.pubxml文件中添加<GenerateAssemblyInfo>false</GenerateAssemblyInfo>:

项目路径:< > /属性/ PublishProfiles / < ProfileName > .pubxml:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        ...
        <!-- Add the line below -->
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
</Project>