225

我有一个项目在编译时产生以下错误:

错误 CS0579:重复的“AssemblyVersion”属性

我检查了文件AssemblyInfo.cs,看起来那里没有重复。

在 MSDN 上找到了这篇文章,它解决了类似的问题,并且按照本文中的建议也解决了这个问题。

谁能告诉我这里发生了什么?是否仅在两个或多个项目具有相似名称的类的情况下才会发生?或者是别的什么?

4

30 回答 30

285

Visual Studio 2017开始,继续使用该AssemblyInfo.cs文件的另一种解决方案是关闭自动程序集信息生成,如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>

我个人觉得它对于需要同时支持 .NET Framework 和 .NET Standard 的项目非常有用。

于 2017-06-12T15:05:17.657 回答
173

我过去也遇到过这个问题,所以我假设你的构建过程提供了单独的程序集信息来提供版本控制。这会导致重复,因为您的项目在AssemblyInfo.cs文件中也有该信息。所以删除文件,我认为它应该可以工作。

于 2012-04-25T09:15:12.650 回答
21

我有同样的错误,它在Assembly Vesrion和Assembly File Version下划线,所以阅读Luqi的答案我只是将它们添加为评论,错误就解决了

// AssemblyVersion is the CLR version. Change this only when making breaking    changes
//[assembly: AssemblyVersion("3.1.*")]
// AssemblyFileVersion should ideally be changed with each build, and should help identify the origin of a build
//[assembly: AssemblyFileVersion("3.1.0.0")]
于 2015-06-25T21:46:48.777 回答
21

将旧项目转换为 .NET Core 时,AssemblyInfo.cs 中的大部分信息现在可以在项目本身上设置。打开项目属性并选择 Package 选项卡以查看新设置。

Eric L. Anderson 的帖子“重复 'System.Reflection.AssemblyCompanyAttribute' 属性”描述 了 3 个选项:

  • 从 AssemblyInfo.cs 文件中删除冲突项,
  • 完全删除文件或
  • 禁用 GenerateAssemblyInfo (正如Serge Semenov 在另一个答案中所建议的那样)
于 2017-09-07T11:57:22.530 回答
20

就我而言,项目中的一个子文件夹是它自己的项目文件夹:

  • 文件系统:

    • c:\projects\webapi\wepapi.csproj
    • c:\projects\webapi\tests\wepapitests.csproj
  • 解决方案

    • webapi(文件夹和项目)
      • 测试(文件夹)
    • 测试(文件夹和项目)

然后我不得不从“webapi”项目中删除子文件夹“tests”。

于 2017-12-12T12:25:14.497 回答
10

就我而言,编译期间生成的一些临时 *.cs 文件被意外添加到项目中。

这些文件来自obj\Debug目录,因此绝对不应该将它们添加到解决方案中。*.cs通配符有点疯狂并错误地添加了它们。

删除这些文件解决了这个问题。

于 2016-02-26T00:56:34.927 回答
8

这里的项目中必须已经有一个 AssemblyInfo.cs 文件: 在此处输入图像描述

解决方法: - 删除任意一个 AssemblyInfo.cs

于 2020-04-16T12:11:04.317 回答
7

当我尝试添加 GitVersion 工具来更新我在 AssemblyInfo.cs 中的版本时,我遇到了同样的情况。使用 VS2017 和 .NET Core 项目。所以我只是混合了两个世界。我的 AssemblyInfo.cs 仅包含由 GitVersion 工具生成的版本信息,我的 csproj 包含剩余的东西。请注意我不使用<GenerateAssemblyInfo>false</GenerateAssemblyInfo>我只使用与版本相关的属性(见下文)。此处为 AssemblyInfo 属性的更多详细信息。

装配信息.cs

[assembly: AssemblyVersion("0.2.1.0")]
[assembly: AssemblyFileVersion("0.2.1.0")]
[assembly: AssemblyInformationalVersion("0.2.1+13.Branch.master.Sha.119c35af0f529e92e0f75a5e6d8373912d457818")]

my.csproj包含所有与其他程序集相关的属性:

<PropertyGroup>
   ...
  <Company>SOME Company </Company>
  <Authors>Some Authors</Authors>
  <Product>SOME Product</Product>
   ...
  <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
  <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
  <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>

csproj 映射到项目属性中的包选项卡

于 2019-01-30T10:20:39.963 回答
4

对我来说,AssembyInfo.cs 和 SolutionInfo.cs 有不同的值。所以也要检查这些文件。我刚刚从其中一个中删除了版本。

于 2014-01-17T12:15:58.793 回答
4

发生我的错误是因为不知何故,在我的控制器文件夹中创建了一个 obj 文件夹。只需在您的应用程序中搜索您的 Assemblyinfo.cs 中的一行。某处可能有重复。

于 2017-03-23T16:09:07.493 回答
2

将核心升级到 VS2017 时的另一个解决方案是在 properties\assemblyinfo.cs 文件中删除它们。

因为它们现在存储在项目中。

于 2017-10-19T07:56:57.813 回答
2

如果我在 Visual Studio 2017 中编译项目然后我尝试使用命令行命令“dotnet run”使用 .NET Core 重建和运行它,这通常会发生在我身上。

只需删除所有“bin”和“obj”文件夹 - 都在“ClientApp”内和直接在项目文件夹中 - 允许 .NET Core 命令“dotnet run”重新构建并成功运行。

于 2018-12-25T02:10:04.200 回答
2

我最近遇到了这个问题,没有对源代码进行任何更改,但是在尝试了一些新的项目参考之后。即使在还原分支中的所有更改后,我也进入了出现此错误的状态。

清理分支为我解决了这个问题:

git clean -xfd

于 2021-01-22T19:36:12.827 回答
2

您可以删除binobj文件并清除项目的缓存。我的问题由此得到解决。

于 2021-07-15T16:55:14.097 回答
1

我在 msdn 上找到了这个答案,它解释了将文件标记为内容,然后复制到输出 = 如果较新。请参阅下面的文章:

https://social.msdn.microsoft.com/Forums/en-US/8671bdff-9b16-4b49-ba9e-227cc4df31b2/compile-error-cs0579-duplicate-assemblyversion-attribute?forum=vsgatk

生长激素

于 2019-01-29T16:38:32.197 回答
1

编辑您的 AssemblyInfo.cs 和 #if !NETCOREAPP3_0 ... #endif

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.

#if !NETCOREAPP3_0  

[assembly: AssemblyTitle(".Net Core Testing")]
[assembly: AssemblyDescription(".Net Core")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct(".Net Core")]
[assembly: AssemblyCopyright("Copyright ©")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("000b119c-2445-4977-8604-d7a736003d34")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

#endif
于 2019-06-09T20:46:17.577 回答
1

当我将 2 个项目放在同一个目录中时,我得到了这个错误。如果我有一个包含解决方案的目录,并且我在其中放置了一个单独的 Web 和 Data 目录,则编译正确。

于 2019-10-17T08:46:15.750 回答
1

当我的主项目与解决方案位于同一文件夹中时,我遇到了这个问题,然后我在位于子文件夹中的同一解决方案中有一个单独的项目,并且该单独的项目使用主项目作为参考。这导致主项目检测到创建重复引用的子文件夹 bin 和 obj 文件夹。

于 2019-11-12T00:14:28.407 回答
1

如果在 Azure DevOps 上的构建管道中遇到此问题,请尝试在 AssembyInfo.cs 文件属性中将构建操作作为“内容”并复制到等于“如果较新则复制”的输出目录。

于 2020-01-24T14:19:00.773 回答
1

创建项目时,Visual Studio 会对其进行设置以编译并生成相应的程序集。每个项目生成 1 个程序集,因此每个项目都有相应的程序集配置来生成其程序集。

问题是当您创建多个项目时,每个项目都可以生成自己的程序集,然后将其中一个项目包含在另一个项目中

在这种情况下,Visual Studio 会感到困惑,不知道要使用哪个配置文件来为项目生成单个程序集——它在包含的项目中找到第二个程序集配置并说“嘿,重复!你已经给了我两套指令来生成我的程序集!”

但有时您仍然希望包含的项目能够自己生成程序集,但当它被包含在另一个项目中时则不然。

为此,一种解决方案是将条件定义添加到包含项目(在项目 Properties中找到)。然后更改包含项目中的程序集配置以查找此条件定义。如果它是由包含项目定义的,那么配置可以跳过它的内容——这将导致 VS 只找到 1 个配置——来自包含项目的那个——问题解决了!

于 2022-01-25T19:35:36.973 回答
0

我的错误是我还在我的项目中引用了另一个文件,该文件也包含属性“AssemblyVersion”的值。我从其中一个文件中删除了该属性,它现在可以正常工作。

关键是确保在项目的任何文件中都不会多次声明此值。

于 2017-03-16T10:38:54.343 回答
0
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(15,12): error CS0579: Duplicate 'System.Reflection.AssemblyConfigurationAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(16,12): error CS0579: Duplicate 'System.Reflection.AssemblyFileVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(17,12): error CS0579: Duplicate 'System.Reflection.AssemblyInformationalVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(18,12): error CS0579: Duplicate 'System.Reflection.AssemblyProductAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(19,12): error CS0579: Duplicate 'System.Reflection.AssemblyTitleAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(20,12): error CS0579: Duplicate 'System.Reflection.AssemblyVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]

我相信我的库文件夹因无意创建另一个类库而损坏。我删除了库和所有相关文件,但问题仍然存在。我通过删除目录中的所有 bin 和 obj 文件夹找到了解决方法。之前的构建没问题,但找到了一个具有相同 assemblyinfo.cs 文件的子文件夹。

于 2020-02-12T01:43:10.510 回答
0

此问题是 VS 2017 特有的参考冲突。

我通过简单地注释掉第 7 -14 行以及 AssemblyInfo.cs 页面底部的程序集版本代码来解决了同样的错误

它删除了所有重复的引用,并且项目能够再次构建。

于 2020-04-01T12:44:06.203 回答
0

从 .NET Framework 切换到 .NET Core 后,我收到了错误消息。我的 Visual Studio 解决方案中有 2 个类库项目。我意识到其中一个项目有一个名为的文件AssemblyInfo.cs,而另一个项目没有该文件。该文件位于Properties文件夹下。我只是删除了 Properties 文件夹,一切正常。

于 2020-12-24T23:38:46.620 回答
0

我一直在努力解决这个问题,但我的问题更容易解决。

我已将 OBJ 文件夹复制到“OBJ___”名称以进行一些编译测试。

所以,我不知道为什么,这个文件夹也被编译了,创建了程序集属性重复。

我只是删除了“OBJ___”文件夹并可以成功编译。

于 2021-02-12T14:26:27.267 回答
0

我刚刚通过将 repo 文件夹重命名为 re-cloning repo 来帮助团队成员解决了这个问题。这只是一个开发人员的问题,因为团队中的其他人都能够构建master而不会遇到此错误,因此我们知道问题不是源代码问题。

我们确实尝试删除 bin 和 obj 文件夹并做了一个git clean -xfd,但这些都没有解决问题。在这种情况下,从一个干净的 repo 副本重新开始就可以了。

于 2021-09-10T14:07:23.663 回答
0

我也一直在努力解决这个问题。在我的情况下,我将解决方案和项目放在同一个地方。所以我遇到了问题。在我选择了一个解决方案文件夹并将项目放在这个解决方案中后,它可以正常工作。

于 2021-10-02T21:10:22.320 回答
0

对于遇到此问题的其他任何人,我为一位同事进行了诊断,她声称她没有更改任何内容,但结果是她不小心复制了一个代码文件夹并且没有意识到这一点。所以这很有趣。

教训:假设每个人都在撒谎。

于 2021-10-18T19:56:35.180 回答
0

就我而言,我的一位同事删除了一个用于测试目的的控制台应用程序,它与我们的 Api 放在同一目录中,然后提交给 Git。当我后来从 Git 中拉出时,控制台应用程序本身当然消失了,但它的 bin 和 obj 文件夹仍然存在,导致 AssemblyInfo.cs 文件同时存在于根应用程序目录和旧控制台应用程序的子目录中。只需删除旧控制台应用程序的 bin 和 obj 文件夹即可解决问题。

ASP.NET 核心 3.1

于 2021-11-02T13:51:20.930 回答
0

我收到这些错误是因为我尝试将 obj 文件夹临时重命名为 obj_,然后它会自动包含在项目中。然后里面的assembly.cs就开始和后面生成的obj文件夹中的那个对了。

于 2021-12-23T07:17:36.883 回答