중복 AssemblyVersion 속성


147

컴파일시 다음과 같은 오류가 발생하는 프로젝트가 있습니다.

오류 CS0579 : 'AssemblyVersion'속성이 중복되었습니다.

파일을 확인 AssemblyInfo.cs했는데 중복이없는 것 같습니다.

MSDN 에서이 기사를 발견 하여 비슷한 문제를 해결 하고이 기사의 제안을 따르면 문제가 해결됩니다.

아무도 여기서 무슨 일이 일어나고 있는지 말해 줄 수 있습니까? 비슷한 이름을 가진 클래스를 가진 두 개 이상의 프로젝트가있는 경우에만 발생합니까? 아니면 다른 것입니까?


그냥 추측하지만 솔루션을 다시 열어 보았습니까? 아마 그게 해결할 수 있을까요?
Stefto April

4
.NET 핵심으로 프로젝트를 변환하는 경우, 참조 elanderson.net/2017/06/...을
마이클 Freidgeim

Mac에서 Visual Studio 2017 Community Edition을 사용하고 있습니다. 콘솔 앱을 가지고 새로운 클래스 라이브러리 프로젝트에 대한 참조를 추가했습니다. 빌드 할 때 이러한 오류가 표시되기 시작했습니다. 내가 한 것은 클래스 라이브러리 프로젝트에 대한 참조를 제거한 다음 다시 추가하면 오류가 사라졌습니다.
Flea

답변:


127

과거 에도이 문제가 발생했기 때문에 빌드 프로세스에서 버전 정보를 제공하는 것과 별도로 어셈블리 정보를 제공한다고 가정합니다. 프로젝트에 AssemblyInfo.cs파일에 정보가 있기 때문에 중복이 발생 합니다. 따라서 파일을 제거하면 제대로 작동한다고 생각합니다.


3
따라서 빌드 프로세스가 새 항목을 만드는 대신 기존 AssemblyVersion을 덮어 쓰지 않아야합니까? 빌드 프로세스가 그렇게한다는 것을 알고 있지만 기존 프로세스를 덮어 쓰지 않는 이유가 궁금합니다. 잘못 구현되었거나 제한입니까?
Aamir

.net 어셈블리의 경우 더 좋은 방법은 버전 주입 방법을 사용하는 것입니다. 그러나 그것은 별개의 이야기입니다. 귀하의 경우 문제는 cmdline 빌드 매개 변수 및 AssemblyInfo.cs를 통해 어셈블리 버전을 제공하는 여러 가지 방법이 있으며 속성 복제가 .net 컴파일 오류이므로 하나의 방법 만 사용하고 있는지 확인해야합니다.
luqi

정확히 무엇을 제거 하시겠습니까?
roberto tomás

193

Visual Studio 2017 부터 AssemblyInfo.cs파일 을 계속 사용하는 또 다른 솔루션 은 다음과 같이 자동 어셈블리 정보 생성을 끄는 것입니다.

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

개인적으로 .NET Framework와 .NET Standard를 모두 지원 해야하는 프로젝트에 매우 유용합니다.


4
예, obj 및 bin 폴더를 삭제하는 것으로 충분하지 않았습니다.
Nick Josevski

불행히도 .csproj속성 페이지 (응용 프로그램, 빌드, 빌드 이벤트 등)를 사용 하여 파일을 변경할 때마다 PropertyGroup와 함께 GenerateAssemblyInfo사라집니다 :-(
Palo Mraz

3
Directory.Build.props 파일로 이동
Bryan

2
이 솔루션으로 가능한 위험 또는 부정적인 결과가 있습니까?
mrcoulson 19

내 문제를 완벽하게 해결했습니다!
다니엘 맥클린

19

나는 같은 오류가 있었고 어셈블리 Vesrion 및 어셈블리 파일 버전을 강조 표시 했으므로 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에 있던 대부분의 정보를 프로젝트 자체에서 설정할 수 있습니다. 프로젝트 속성을 열고 패키지 탭을 선택하여 새 설정을 확인하십시오.

에릭 L. 앤더슨의 게시물에 '중복'System.Reflection.AssemblyCompanyAttribute '속성은' 3 옵션을 설명합니다 :

  • AssemblyInfo.cs 파일에서 충돌하는 항목을 제거하십시오.
  • 파일을 완전히 삭제하거나
  • GenerateAssemblyInfo 비활성화 ( Serge Semenov의 다른 답변 에서 제안한대로 )

.csproj실제 논리를 설명하는 코드가 아닌 메타 데이터이기 때문에 프로젝트 ( ) 에서 이러한 속성을 지정하는 것이보다 직관적이고 "Visual Studio"인 것으로 나타났습니다 . 앞으로 프로젝트에 모든 것을 지정할 수 있기를 바랍니다! (현재 COM 가시성을 지정할 수 없으므로이를 그대로 두십시오 AssemblyInfo.cs.)
Franklin Yu

9

필자의 경우 컴파일 중에 생성 된 일부 임시 * .cs 파일이 실수로 프로젝트에 추가되었습니다.

파일은 obj\Debug디렉토리에서 왔으므로 솔루션에 추가해서는 안됩니다. ㅏ*.cs와일드 카드는 미친 조금 가서 잘못을 추가했다.

이 파일을 삭제하면 문제가 해결되었습니다.


9

필자의 경우 프로젝트의 하위 폴더는 프로젝트 폴더였습니다.

  • 파일 시스템:

    • c : \ 프로젝트 \ webapi \ wepapi.csproj
    • c : \ projects \ webapi \ tests \ wepapitests.csproj
  • 해결책

    • webapi (폴더 및 프로젝트)
      • 테스트 (폴더)
    • 테스트 (폴더 및 프로젝트)

그런 다음 "webapi"프로젝트에서 하위 폴더 "tests"를 제거해야했습니다.


4

나를 위해 AssembyInfo.cs와 SolutionInfo.cs는 다른 값을 가졌습니다. 따라서이 파일들도 확인하십시오. 방금 그들 중 하나에서 버전을 제거했습니다.


3

내 컨트롤러 폴더 안에 obj 폴더가 만들어 져서 오류가 발생했습니다. 응용 프로그램에서 Assemblyinfo.cs 내부의 줄을 검색하십시오. 어딘가에 중복이있을 수 있습니다.


마찬가지로 다른 폴더 안에 다른 .csproj (B)에 속하는 .csproj 파일 (A)이 있습니다.
taylorswiftfan

2

이것은 일반적으로 Visual Studio 2017에서 프로젝트를 컴파일 한 다음 명령 줄 명령 "dotnet run"을 사용하여 .NET Core로 프로젝트를 다시 빌드하고 실행하려고하면 나에게 발생합니다.

"ClientApp"내부와 프로젝트 폴더에서 직접 "bin"및 "obj"폴더를 모두 삭제하기 만하면 .NET Core 명령 "dotnet run"이 성공적으로 재 구축되고 실행될 수있었습니다.



1

코어를 VS2017로 업그레이드 할 때 또 다른 해결책은 properties \ assemblyinfo.cs 파일에서 제거하는 것입니다.

그들은 이제 프로젝트에 저장되기 때문에.



1

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 는 다른 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 폴더가 달라져이 오류가 발생했습니다.
차드 Jessup

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 개의 프로젝트를 넣었을 때이 오류가 발생했습니다. 솔루션이있는 디렉토리가 있고 별도의 웹 및 데이터 디렉토리를 넣으면 올바르게 컴파일됩니다.


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]

다른 클래스 라이브러리를 실수로 만들었을 때 내 라이브러리 폴더가 손상되었다고 생각합니다. 라이브러리와 관련된 모든 파일을 삭제했지만 문제가 지속되었습니다. 디렉토리에서 모든 bin 및 obj 폴더를 삭제하여 해결 방법을 찾았습니다. 빌드는 이전에는 정상이지만 동일한 assemblyinfo.cs 파일을 가진 하위 폴더를 찾았습니다.


0

이 문제는 대부분 VS 2017에 고유 한 참조 충돌입니다.

AssemblyInfo.cs 페이지 하단의 7-14 행과 어셈블리 버전 코드를 주석으로 처리하여 동일한 오류를 해결했습니다.

모든 중복 참조를 제거하고 프로젝트를 다시 빌드 할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.