由于dotnet核心移回.csproj
格式,因此有一个新的自动生成MyProject.AssemblyInfo.cs
,其中包含。{/ p>
[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]
注意每次构建时都会自动重新生成。 以前该文件位于/ obj /目录中,现在它似乎只在内存中,因为无法在磁盘上找到该文件,单击错误消息不会打开任何文件。
由于它们是在那里定义的,我无法在古典AssemblyInfo.cs
中自己定义它们。
在哪里/如何定义公司和项目版本?
答案 0 :(得分:244)
正如您已经注意到的那样,您可以在.csproj中控制大多数这些设置。
如果您希望将它们保存在AssemblyInfo.cs中,则可以关闭自动生成的程序集属性。
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
如果你想看看幕后发生了什么,请查看Microsoft.NET.Sdk中的Microsoft.NET.GenerateAssemblyInfo.targets。
答案 1 :(得分:86)
这些设置已移至.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>
在文件资源管理器属性信息标签中,FileVersion
显示为“文件版本”,Version
显示为“产品版本”
答案 2 :(得分:64)
我为.NET Standard 2.0项目执行以下操作。
创建filter
文件(例如在您的回购根目录中)
并将要从Directory.Build.props
文件共享的属性移动到此文件。
MSBuild会自动将其拾取并将其应用于自动生成的.csproj
。
在使用AssemblyInfo.cs
构建一个或通过Visual Studio 2017中的UI构建一个nuget包时,它们也会应用于nuget包。
请参阅https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build
答案 3 :(得分:37)
您可以随时添加自己的 AssemblyInfo.cs ,这对InternalsVisibleToAttribute
,CLSCompliantAttribute
以及其他非自动生成的内容非常有用。
<project name> > Add > New Folder
。 Add > New Item...
。如果要将属性移回 AssemblyInfo.cs 而不是自动生成它们,可以在his answer中指出的natemcmaster中将它们抑制在MSBuild中。
答案 4 :(得分:4)
答案 5 :(得分:1)
我想用以下内容扩展这个主题/答案。正如有人提到的,这个自动生成的 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): 错误:包含重复的“编译”项目。 .NET SDK默认包含项目目录中的“编译”项。 您可以从项目文件中删除这些项,或者如果要在项目文件中明确包含它们,请将“EnableDefaultCompileItems”属性设置为“false”。 有关更多信息,请参阅https://aka.ms/sdkimplicititems。重复的项目是:'AssemblyInfo.cs'
答案 6 :(得分:0)
在 .NET 5+ 中,您可以使用 AssemblyMetadata:
<AssemblyMetadata Include="Bar" Value="Baz" />