重复的AssemblyVersion属性


146

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

错误CS0579:“ AssemblyVersion”属性重复

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

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

谁能告诉我这是怎么回事?仅在具有两个或更多个名称相似的类的项目时才发生这种情况吗?或者是别的什么?


只是一个猜测,但是,您是否尝试过关闭并再次打开解决方案?也许这可以解决?
Stefto 2012年

4
如果一个项目转换为.NET的核心,见elanderson.net/2017/06/...
迈克尔Freidgeim

我正在Mac上使用Visual Studio 2017社区版。我有一个控制台应用程序,然后添加了对新类库项目的引用。当我进行构建时,这些错误开始出现。我所做的就是删除对类库项目的引用,然后将其重新添加,错误消失了。
跳蚤

Answers:


125

过去我也遇到过此问题,因此我将假定您的构建过程将提供组装信息与提供版本控制分开。这会导致重复,因为您的项目在AssemblyInfo.cs文件中也包含该信息。因此,删除文件,我认为它应该可以工作。


3
因此,构建过程是否应该覆盖现有的AssemblyVersion而不是创建新条目?我知道我们的构建过程可以做到这一点,但是我很好奇为什么它不会覆盖现有的过程。它执行不当还是有局限性?
阿米尔(Aamir)2012年

我认为对于.net程序集,更好的方法是使用版本注入方法。但这是一个不同的故事。在您的情况下,问题是通过cmdline生成参数和AssemblyInfo.cs提供程序集版本的方式有所不同,并且您必须确保仅使用一种方法作为属性的重复是.net编译错误。
luqi 2012年

究竟删除什么?
robertotomás

192

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

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

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


4
是的,这对我有用,仅删除obj和bin文件夹是不够的。
尼克·约瑟夫斯基

不幸的是,每次我改变.csproj使用它的属性页(应用程序,构建,生成事件等),该文件PropertyGroupGenerateAssemblyInfo消失:-(
帕洛阿尔托玛耶兹

3
将其移动到Directory.Build.props文件中
Bryan

2
此解决方案可能存在任何风险或负面结果吗?
mrcoulson '19

完美解决了我的问题!
Daniel Maclean

19

我遇到了同样的错误,并且它强调了Assembly Vesrion和Assembly File版本,因此阅读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")]

我尝试了一下,但就我而言,它什么都没有改变:-(
Gertsen

18

将较旧的项目转换为.NET Core时,AssemblyInfo.cs中的大多数信息现在都可以在项目本身上设置。打开项目属性,然后选择“软件包”选项卡以查看新设置。

埃里克·安德森Eric L. Anderson)的帖子“重复的'System.Reflection.AssemblyCompanyAttribute'属性” 描述了3个选项:


我发现在项目(.csproj)中指定这些属性更直观,更“ Visual Studio” ,因为它们是元数据而不是描述实际逻辑的代码。我希望将来可以在项目中指定所有内容!(当前,我无法指定COM可见性,因此将其保留在AssemblyInfo.cs。)
Franklin Yu

9

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

这些文件来自obj\Debug目录,因此绝对不应该将它们添加到解决方案中。一个*.cs通配符去有点疯狂,并加入他们不正确。

删除这些文件可解决此问题。


9

在我的情况下,项目中的某个子文件夹是它自己的项目文件夹:

  • 文件系统:

    • c:\ projects \ webapi \ wepapi.csproj
    • c:\ projects \ webapi \ tests \ wepapitests.csproj
    • webapi(文件夹和项目)
      • 测试(文件夹)
    • 测试(文件夹和项目)

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


4

对我来说,AssembyInfo.cs和SolutionInfo.cs具有不同的值。因此,还要检查这些文件。我只是从其中之一中删除了该版本。


3

发生我的错误是因为以某种方式在我的controllers文件夹中创建了一个obj文件夹。只需在您的应用程序中搜索Assemblyinfo.cs中的一行即可。某处可能有重复项。


同样,我在属于另一个.csproj(B)的另一个文件夹中有一个.csproj文件(A)。
taylorswiftfan

2

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

只需删除所有“ bin”和“ obj”文件夹-既在“ ClientApp”内部,又直接在项目文件夹中-都可以使.NET Core命令“ dotnet run”重建并成功运行。


2

项目中这里必须已经有一个AssemblyInfo.cs文件: 在此处输入图片说明

解决:-删除任何一个AssemblyInfo.cs


1

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

由于它们现在存储在项目中。



1

尝试添加GitVersion工具更新AssemblyInfo.cs中的版本时遇到了相同的问题。使用VS2017和.NET Core项目。所以我只是混合了两个世界。我的AssemblyInfo.cs只包含GitVersion工具生成的版本信息,我的csproj包含keepgin东西。请注意,我不使用<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包含与所有assemblyu属性相关的所有属性:

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

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


1

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


这对我帮助很大!一个项目将另一个项目引用为构建时依赖项,但是csproj中的错误导致obj文件夹不同,从而产生此错误。
乍得杰瑟普

0

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

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


0

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

0

当我确实将2个项目放在同一目录中时出现此错误。如果我有一个带有解决方案的目录,并且在其中放置了单独的Web和Data目录,则可以正确编译。


0

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


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]

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


0

此问题是参考冲突,大部分是VS 2017特有的。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.