相当于dotnet core/csproj中的AssemblyInfo

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

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

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

错误信息: enter image description here < / p >

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

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

160970 次浏览

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

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

项目属性,tab 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,这对于InternalsVisibleToAttributeCLSCompliantAttribute和其他不是自动生成的对象很方便。

将AssemblyInfo.cs添加到项目

  1. 在解决方案资源管理器中,右键单击<project name> > Add > New Folder

Add New Folder .

  1. 命名文件夹为Properties。

名称文件夹属性

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

Add New Item

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

Name file AssemblyInfo.cs .cs

抑制自动生成的属性

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

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

<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文件中的程序集信息条目一起出现。

< p > C: \ Program Files \ dotnet \ sdk \ 2.0.2 \ sdk \ Microsoft.NET.Sdk \制造\ Microsoft.NET.Sdk.DefaultItems.targets (263 5): 错误:包含了重复的“编译”项。. net SDK默认包含项目目录中的“Compile”项。 你可以从你的项目文件中删除这些项,或者设置'EnableDefaultCompileItems'属性为'false',如果你想显式地将它们包含在你的项目文件中。 更多信息,参见https://aka.ms/sdkimplicititems。重复项是:'AssemblyInfo.cs'

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

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

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

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

当使用dotnet pack或通过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类,而不仅仅是一个普通类:

enter image description here

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

<AssemblyMetadata Include="Bar" Value="Baz" />

谢谢,这对我帮助很大。

在我的例子中,在ReleaseDebug上构建项目Blazor Server Side Website都是成功的,但发布网站仍然失败,出现了Duplicate Attribute错误,这让我有点困惑。

解决方案是将<GenerateAssemblyInfo>false</GenerateAssemblyInfo>同时添加到.csproj.pubxml文件中:

路径:<Project>/Properties/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>