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

重复'AssemblyVersion'属性

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

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

有人能告诉我这是怎么回事吗?这种情况是否只发生在有两个或多个类名称相似的项目的情况下?还是其他原因?


当前回答

当将core升级到VS2017时,另一个解决方案是在属性\assemblyinfo.cs文件中删除它们。

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

其他回答

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文件的子文件夹。

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

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

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

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

要获得这一点,一种解决方案是向包含项目的项目(在项目属性中可以找到)添加条件定义。然后更改所包含项目中的程序集配置,以查找此条件定义。如果它是定义的(由包括项目),那么配置可以跳过它的内容——这将导致只有一个配置被VS发现——从包括项目——问题解决了!

以下步骤(包括截图)

步骤1:选择包含/容器项目>右键单击>属性

项目属性(截图)

步骤2:导航到Build > General >条件编译符号

添加如下所示的条件定义:

条件编译符号(截图)

步骤3:在包含的项目AssemblyInfo.cs中使用条件定义

使用条件定义(截图)

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

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

GH

我一直在这个问题上挣扎,但我的问题很容易解决。

我已经将OBJ文件夹复制到“OBJ___”名称来做一些编译测试。

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

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

我刚刚帮助一个团队成员通过重命名回购文件夹重新克隆回购解决了这个问题。这只是一个开发人员的问题,因为团队中的其他人都能够在构建master时不碰到这个错误,所以我们知道这个问题不是源代码的问题。

我们确实尝试删除bin和obj文件夹,并执行git clean -xfd,但这些都没有解决这个问题。在这种情况下,用一个干净的回购副本重新开始是有效的。