相当于dotnet core / csproj

时间:2017-02-09 13:46:48

标签: visual-studio visual-studio-2017 .net-core assemblyinfo

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

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

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

这是错误消息: enter image description here

由于它们是在那里定义的,我无法在古典AssemblyInfo.cs中自己定义它们。

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

7 个答案:

答案 0 :(得分:244)

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

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

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

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

答案 1 :(得分:86)

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

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

Project properties, 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显示为“产品版本”

答案 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 ,这对InternalsVisibleToAttributeCLSCompliantAttribute以及其他非自动生成的内容非常有用。

将AssemblyInfo.cs添加到项目

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

    1. 将文件夹命名为“属性”。
    2. Name folder Properties

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

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

          抑制自动生成的属性

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

答案 4 :(得分:4)

除了NightOwl888的答案外,您还可以进一步添加一个AssemblyInfo类,而不只是一个普通类:

enter image description here

答案 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" />