我有一个项目在编译时产生以下错误:
错误 CS0579:重复的“AssemblyVersion”属性
我检查了文件AssemblyInfo.cs
,看起来那里没有重复。
我在 MSDN 上找到了这篇文章,它解决了类似的问题,并且按照本文中的建议也解决了这个问题。
谁能告诉我这里发生了什么?是否仅在两个或多个项目具有相似名称的类的情况下才会发生?或者是别的什么?
我有一个项目在编译时产生以下错误:
错误 CS0579:重复的“AssemblyVersion”属性
我检查了文件AssemblyInfo.cs
,看起来那里没有重复。
我在 MSDN 上找到了这篇文章,它解决了类似的问题,并且按照本文中的建议也解决了这个问题。
谁能告诉我这里发生了什么?是否仅在两个或多个项目具有相似名称的类的情况下才会发生?或者是别的什么?
从Visual Studio 2017开始,继续使用该AssemblyInfo.cs
文件的另一种解决方案是关闭自动程序集信息生成,如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>
我个人觉得它对于需要同时支持 .NET Framework 和 .NET Standard 的项目非常有用。
我过去也遇到过这个问题,所以我假设你的构建过程提供了单独的程序集信息来提供版本控制。这会导致重复,因为您的项目在AssemblyInfo.cs
文件中也有该信息。所以删除文件,我认为它应该可以工作。
我有同样的错误,它在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")]
将旧项目转换为 .NET Core 时,AssemblyInfo.cs 中的大部分信息现在可以在项目本身上设置。打开项目属性并选择 Package 选项卡以查看新设置。
Eric L. Anderson 的帖子“重复 'System.Reflection.AssemblyCompanyAttribute' 属性”描述 了 3 个选项:
就我而言,项目中的一个子文件夹是它自己的项目文件夹:
文件系统:
解决方案
然后我不得不从“webapi”项目中删除子文件夹“tests”。
就我而言,编译期间生成的一些临时 *.cs 文件被意外添加到项目中。
这些文件来自obj\Debug
目录,因此绝对不应该将它们添加到解决方案中。*.cs
通配符有点疯狂并错误地添加了它们。
删除这些文件解决了这个问题。
当我尝试添加 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>
对我来说,AssembyInfo.cs 和 SolutionInfo.cs 有不同的值。所以也要检查这些文件。我刚刚从其中一个中删除了版本。
发生我的错误是因为不知何故,在我的控制器文件夹中创建了一个 obj 文件夹。只需在您的应用程序中搜索您的 Assemblyinfo.cs 中的一行。某处可能有重复。
将核心升级到 VS2017 时的另一个解决方案是在 properties\assemblyinfo.cs 文件中删除它们。
因为它们现在存储在项目中。
如果我在 Visual Studio 2017 中编译项目然后我尝试使用命令行命令“dotnet run”使用 .NET Core 重建和运行它,这通常会发生在我身上。
只需删除所有“bin”和“obj”文件夹 - 都在“ClientApp”内和直接在项目文件夹中 - 允许 .NET Core 命令“dotnet run”重新构建并成功运行。
我最近遇到了这个问题,没有对源代码进行任何更改,但是在尝试了一些新的项目参考之后。即使在还原分支中的所有更改后,我也进入了出现此错误的状态。
清理分支为我解决了这个问题:
git clean -xfd
您可以删除bin和obj文件并清除项目的缓存。我的问题由此得到解决。
我在 msdn 上找到了这个答案,它解释了将文件标记为内容,然后复制到输出 = 如果较新。请参阅下面的文章:
生长激素
编辑您的 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
当我将 2 个项目放在同一个目录中时,我得到了这个错误。如果我有一个包含解决方案的目录,并且我在其中放置了一个单独的 Web 和 Data 目录,则编译正确。
当我的主项目与解决方案位于同一文件夹中时,我遇到了这个问题,然后我在位于子文件夹中的同一解决方案中有一个单独的项目,并且该单独的项目使用主项目作为参考。这导致主项目检测到创建重复引用的子文件夹 bin 和 obj 文件夹。
如果在 Azure DevOps 上的构建管道中遇到此问题,请尝试在 AssembyInfo.cs 文件属性中将构建操作作为“内容”并复制到等于“如果较新则复制”的输出目录。
创建项目时,Visual Studio 会对其进行设置以编译并生成相应的程序集。每个项目生成 1 个程序集,因此每个项目都有相应的程序集配置来生成其程序集。
问题是当您创建多个项目时,每个项目都可以生成自己的程序集,然后将其中一个项目包含在另一个项目中。
在这种情况下,Visual Studio 会感到困惑,不知道要使用哪个配置文件来为项目生成单个程序集——它在包含的项目中找到第二个程序集配置并说“嘿,重复!你已经给了我两套指令来生成我的程序集!”
但有时您仍然希望包含的项目能够自己生成程序集,但当它被包含在另一个项目中时则不然。
为此,一种解决方案是将条件定义添加到包含项目(在项目 Properties中找到)。然后更改包含项目中的程序集配置以查找此条件定义。如果它是由包含项目定义的,那么配置可以跳过它的内容——这将导致 VS 只找到 1 个配置——来自包含项目的那个——问题解决了!
我的错误是我还在我的项目中引用了另一个文件,该文件也包含属性“AssemblyVersion”的值。我从其中一个文件中删除了该属性,它现在可以正常工作。
关键是确保在项目的任何文件中都不会多次声明此值。
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 特有的参考冲突。
我通过简单地注释掉第 7 -14 行以及 AssemblyInfo.cs 页面底部的程序集版本代码来解决了同样的错误
它删除了所有重复的引用,并且项目能够再次构建。
从 .NET Framework 切换到 .NET Core 后,我收到了错误消息。我的 Visual Studio 解决方案中有 2 个类库项目。我意识到其中一个项目有一个名为的文件AssemblyInfo.cs
,而另一个项目没有该文件。该文件位于Properties
文件夹下。我只是删除了 Properties 文件夹,一切正常。
我一直在努力解决这个问题,但我的问题更容易解决。
我已将 OBJ 文件夹复制到“OBJ___”名称以进行一些编译测试。
所以,我不知道为什么,这个文件夹也被编译了,创建了程序集属性重复。
我只是删除了“OBJ___”文件夹并可以成功编译。
我刚刚通过将 repo 文件夹重命名为 re-cloning repo 来帮助团队成员解决了这个问题。这只是一个开发人员的问题,因为团队中的其他人都能够构建master而不会遇到此错误,因此我们知道问题不是源代码问题。
我们确实尝试删除 bin 和 obj 文件夹并做了一个git clean -xfd
,但这些都没有解决问题。在这种情况下,从一个干净的 repo 副本重新开始就可以了。
我也一直在努力解决这个问题。在我的情况下,我将解决方案和项目放在同一个地方。所以我遇到了问题。在我选择了一个解决方案文件夹并将项目放在这个解决方案中后,它可以正常工作。
对于遇到此问题的其他任何人,我为一位同事进行了诊断,她声称她没有更改任何内容,但结果是她不小心复制了一个代码文件夹并且没有意识到这一点。所以这很有趣。
教训:假设每个人都在撒谎。
就我而言,我的一位同事删除了一个用于测试目的的控制台应用程序,它与我们的 Api 放在同一目录中,然后提交给 Git。当我后来从 Git 中拉出时,控制台应用程序本身当然消失了,但它的 bin 和 obj 文件夹仍然存在,导致 AssemblyInfo.cs 文件同时存在于根应用程序目录和旧控制台应用程序的子目录中。只需删除旧控制台应用程序的 bin 和 obj 文件夹即可解决问题。
ASP.NET 核心 3.1
我收到这些错误是因为我尝试将 obj 文件夹临时重命名为 obj_,然后它会自动包含在项目中。然后里面的assembly.cs就开始和后面生成的obj文件夹中的那个对了。