重复装配版本属性

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

重复'AssemblyVersion'属性

我已经检查了文件AssemblyInfo.cs,它看起来没有复制。

我发现这篇文章在MSDN上解决了类似的问题,并遵循本文中的建议修复了这个问题。

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

202578 次浏览

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

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

我也有同样的错误,它在Assembly Vesrion和Assembly File Version下面划线,所以阅读Luqi answer,我只是把它们作为注释添加了进去,错误就解决了

// 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")]

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

这些文件来自obj\Debug目录,所以它们肯定不应该被添加到解决方案中。*.cs通配符有点疯狂,错误地添加了它们。

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

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

关键是要确保在项目中的任何文件中声明这个值不超过一次。

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

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

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

我个人认为它对于需要同时支持。net框架和。net标准的项目非常有用。

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

Eric L. Anderson的帖子 “复制”System.Reflection。描述了3个选项:

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

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

在我的例子中,在项目中有一个子文件夹,它本身就是一个项目文件夹:

  • < p >文件系统:

    • c: \ \ webapi \ wepapi.csproj项目
    • c: \ \ webapi \ \ wepapitests.csproj测试项目
  • < p >解决方案

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

然后我不得不删除子文件夹"test "从"webapi"项目。

EDIT 2022:为了更清楚,正如@bobt在评论中提到的,由“remove”;我的意思是:右键点击“测试”;在webapi内的文件夹中,选择“排除项目”选项。

如果我在Visual Studio 2017中编译项目,通常会发生这种情况;然后我试着重建&用. net Core运行,命令行命令“dotnet run”。

简单地删除所有的“bin”&"obj"文件夹-都在"ClientApp" &直接在项目文件夹中-允许.NET Core命令“dotnet run”来重建&成功运行。

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

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

“大酒店”

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

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 maps to package tab at project properties

编辑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

当我把两个项目放在同一个目录中时,我得到了这个错误。如果我有一个解决方案的目录,我把一个单独的Web和数据目录放在它编译正确。

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

如果您在Azure DevOps上的构建管道中遇到此问题,请尝试将构建操作设置为“Content”,并在AssembyInfo.cs文件属性中将“Copy to Output Directory”设置为“如果更新则复制”。

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

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

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

它删除了所有重复的引用,项目能够重新构建。

在项目中必须已经有一个AssemblyInfo.cs文件: enter image description here < / p > < p >来解决: —删除任意一个AssemblyInfo.cs

.c

我刚从。net Framework切换到。net Core就出现了错误。我的Visual Studio解决方案中有2个类库项目。我意识到其中一个项目有一个名为AssemblyInfo.cs的文件,而另一个项目没有这个文件。该文件位于Properties文件夹下。我只是删除了属性文件夹,一切工作正常。

我最近遇到了这种情况,没有对源代码进行任何更改,但在尝试了一些新的项目参考之后。我进入了这样一种状态,即使在恢复了分支中的所有更改之后,这个错误仍然出现。

清理树枝解决了我的问题:

git clean -xfd

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

我已经将OBJ文件夹复制到“obj__”;名称来执行一些编译测试。

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

我只是删除了&;obj__ &;文件夹,可以编译成功。

你可以删除箱子obj文件,并清除项目的缓存。我的问题从此解决了。

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

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

我也一直在这个问题上挣扎。 在我的例子中,我把解决方案和项目放在了同一个地方,所以我遇到了问题。当我为解决方案选择了一个文件夹并将项目放在这个解决方案中后,它就正常工作了
在我的例子中,我的一个同事删除了一个用于测试的控制台应用程序,它与我们的Api放在同一个目录下,然后提交给Git。 当我后来从Git中退出时,控制台应用程序本身当然已经消失了,但它的bin和obj文件夹仍然在那里,导致AssemblyInfo.cs文件同时出现在旧控制台应用程序的根应用程序目录和子目录中。简单地删除旧控制台应用程序的bin和obj文件夹就解决了这个问题

ASP。NET Core 3.1

我得到这些错误,因为我试图临时重命名obj文件夹为obj_,然后它自动包含在项目中。然后其中的assembly.cs开始与后来生成的obj文件夹中的正确的程序发生冲突。

创建项目时,Visual Studio将其设置为compile &生成相应的组装。每个项目生成一个程序集,因此每个项目都有一个对应的组装配置来生成它的程序集。

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

在这种情况下,Visual Studio会感到困惑,不知道应该使用哪个配置文件来生成项目的单一组装——它会在包括项目中找到第二个程序集配置,并说“HEY, DUPLICATE!”您已经给了我两组生成我的程序集的指令!”

但有时你仍然希望包括项目能够自己生成程序集,而当< >强但是< / >强被包含在另一个项目中时则不能。

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

以下步骤(包括截图)

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

项目属性(截图

第二步:导航到Build >一般比;条件编译符号

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

条件编译符号(截图

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

使用条件定义(截图)

当我改变文件夹结构并尝试推送时,我也遇到了同样的问题。少管所让我先拔,我就拔了。这将我的源代码复制到旧文件夹而且中的新文件夹中,因此在构建时出现了大量的复制错误。

只需删除重复的文件夹就可以解决这个问题。