As part of my research into IdentityServer4 I forked their samples repo, but I ran into the following issue trying to build the solution for the Client Credentials quickstart.
CS0579 Duplicate ‘System.Reflection.AssemblyCompanyAttribute’ attribute
CS0579 Duplicate ‘System.Reflection.AssemblyConfigurationAttribute’ attribute
CS0579 Duplicate ‘System.Reflection.AssemblyProductAttribute’ attribute
Searching the project each of these attributes only exists only in the AssemblyInfo.cs file found under properties. It turns out the file that is causing the issues only exists as a result of the build process and is found in the \obj\Debug\netcoreapp1.1\{ProjectName}.AssemblyInfo.cs file.
In this case, the client project is a console application so I created a new console application and the template no longer generates an AssemblyInfo.cs file for .NET Core. It turns out that as part of the move back to csproj most of the information that was in the AssemblyInfo.cs can now be set on the project its self. Open the project properties and select the Package tab to see the new settings.
Resolution
I found this issue on GitHub where there were a couple of options to resolve this issue which I am going to cover here plus a third option I tried not mention in the issue.
Option one is to remove the conflicting items from the AssemblyInfo.cs file. For example, the following would allow the project I am working with to build.
Before: [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Client")] [assembly: AssemblyTrademark("")] After: [assembly: AssemblyTrademark("")]
Option two is to edit the csproj and turn the generation of the attributes causing the issues off.
Before: <PropertyGroup> <TargetFramework>netcoreapp1.1</TargetFramework> <OutputType>Exe</OutputType> </PropertyGroup> After: <PropertyGroup> <TargetFramework>netcoreapp1.1</TargetFramework> <OutputType>Exe</OutputType> <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> </PropertyGroup>
The third option is to total delete the AssemblyInfo.cs file if your project doesn’t need it. This is the option I chose to go with. For a reason, you might want to keep the file around and just use option one see the “AssemblyInfo.cs is partially dead” section of this post by Muhammad Rehan Saeed. Side note: if you are interested in ASP.NET Core and you aren’t following Rehan you really should be.
Wrapping up
This is an issue that you will really only face when converting an older project to .NET Core. The fix is simple enough once you know what is going on. I opened an issue on the IdentityServer samples if you want to track if this has been fixed yet.
I think it is worth to mentioned that you may still want to use your old AssemblyInfo.cs for older .NET platform. In that case you may add following lines to your *.csproj file for .NET Standard to remove this from compilation time.
<ItemGroup>
<Compile Remove=”Properties\AssemblyInfo.cs” />
</ItemGroup>
Thank you for the info Zoltraks!
Thanks for the mention.
Pingback: [C#] 중복 AssemblyVersion 속성 - 리뷰나라