แอตทริบิวต์ AssemblyVersion ที่ซ้ำกัน


147

ฉันมีโครงการที่สร้างข้อผิดพลาดต่อไปนี้ในการรวบรวม:

ข้อผิดพลาด CS0579: แอตทริบิวต์ซ้ำ 'AssemblyVersion' ซ้ำ

ฉันตรวจสอบไฟล์แล้วAssemblyInfo.csและดูเหมือนว่าไม่มีการทำซ้ำที่นั่น

ฉันพบบทความนี้ใน MSDNซึ่งเน้นปัญหาที่คล้ายกันและทำตามคำแนะนำในบทความนี้แก้ไขปัญหาได้เช่นกัน

ใครสามารถบอกฉันว่าเกิดอะไรขึ้นที่นี่ มันเกิดขึ้นเฉพาะในกรณีที่มีสองโครงการขึ้นไปที่มีคลาสที่มีชื่อเหมือนกันหรือไม่? หรือมันเป็นอย่างอื่น?


แค่เดา ​​แต่คุณลองปิดแล้วเปิดวิธีแก้ปัญหาอีกครั้งหรือไม่ บางทีนั่นอาจจะแก้ปัญหาได้?
Stefto

4
หากแปลงโครงการเป็น. NET Core โปรดดูelanderson.net/2017/06/…
Michael Freidgeim

ฉันใช้ Visual Studio 2017 Community edition บน Mac ฉันมีแอพคอนโซลแล้วฉันเพิ่มการอ้างอิงถึงโครงการไลบรารีคลาสใหม่ ข้อผิดพลาดเหล่านี้เริ่มปรากฏขึ้นเมื่อฉันสร้าง ทั้งหมดที่ฉันทำคือลบการอ้างอิงไปยังโครงการห้องสมุดคลาสแล้วเพิ่มกลับไปและข้อผิดพลาดก็หายไป
หมัด

คำตอบ:


127

ฉันยังพบปัญหานี้ในอดีตดังนั้นฉันจะสมมติว่ากระบวนการสร้างของคุณให้ข้อมูลแอสเซมบลีแยกต่างหากเพื่อให้การกำหนดเวอร์ชัน และนั่นทำให้การทำซ้ำเป็นโครงการของคุณยังมีข้อมูลในAssemblyInfo.csไฟล์ ดังนั้นลบไฟล์และฉันคิดว่ามันควรจะทำงาน


3
ดังนั้นไม่ควรสร้างกระบวนการเขียนทับ AssemblyVersion ที่มีอยู่แทนที่จะสร้างรายการใหม่ ฉันรู้ว่ากระบวนการสร้างของเราทำเช่นนั้น แต่ฉันอยากรู้ว่าทำไมมันไม่เขียนทับกระบวนการเดิม มีการใช้งานไม่ดีหรือมีข้อ จำกัด หรือไม่?
Aamir

ฉันคิดว่า. net แอสเซมบลีวิธีที่ดีกว่าจะใช้วิธีการฉีดรุ่น แต่นั่นเป็นเรื่องที่แยกจากกัน ในกรณีของคุณปัญหาคือมีวิธีที่แตกต่างกันในการจัดเตรียมเวอร์ชันแอสเซมบลีผ่านพารามิเตอร์สร้าง cmdline และผ่าน AssemblyInfo.cs และคุณต้องตรวจสอบให้แน่ใจว่ามีการใช้วิธีเดียวเท่านั้นในการทำซ้ำแอตทริบิวต์
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ไฟล์โดยใช้หน้าคุณสมบัติ (Application, Build, Build Events และอื่น ๆ ) จะPropertyGroupมีการGenerateAssemblyInfoหายไป :-(
Palo Mraz

3
ย้ายไปไว้ในไฟล์ Directory.Build.props
Bryan

2
มีความเสี่ยงหรือผลลัพธ์เชิงลบที่เป็นไปได้ด้วยวิธีนี้หรือไม่?
mrcoulson

แก้ไขปัญหาของฉันอย่างสมบูรณ์แบบ!
Daniel Maclean

19

ฉันมีข้อผิดพลาดเดียวกันและมันขีดเส้นใต้ 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")]

ฉันลองสิ่งนี้และไม่มีอะไรเปลี่ยนแปลงในกรณีของฉัน :-(
Gertsen

18

เมื่อแปลงโครงการเก่าเป็น. NET Core ข้อมูลส่วนใหญ่ที่อยู่ใน AssemblyInfo.cs สามารถตั้งค่าได้ในโครงการ เปิดคุณสมบัติโครงการและเลือกแท็บแพคเกจเพื่อดูการตั้งค่าใหม่

เอริคแอลแอนเดอร์โพสต์ "ที่ซ้ำกัน 'System.Reflection.AssemblyCompanyAttribute' แอตทริบิวต์" อธิบายตัวเลือก 3:

  • ลบรายการที่ขัดแย้งกันออกจากไฟล์ AssemblyInfo.cs
  • ลบไฟล์ทั้งหมดหรือ
  • ปิดใช้งาน GenerateAssemblyInfo (ตามที่แนะนำในคำตอบอื่นโดย Serge Semenov )

ฉันพบว่าใช้งานง่ายและ "Visual Studio" มากขึ้นเพื่อระบุแอตทริบิวต์เหล่านี้ในโครงการ ( .csproj) เนื่องจากเป็นข้อมูลเมตาแทนที่จะเป็นรหัสที่อธิบายถึงตรรกะที่แท้จริง ฉันหวังว่าในอนาคตทุกอย่างสามารถระบุได้ในโครงการ! (ปัจจุบันฉันไม่สามารถระบุการมองเห็น COM ได้ดังนั้นฉันจึงปล่อยไว้AssemblyInfo.cs)
Franklin Yu

9

ในกรณีของฉันไฟล์ * .cs ชั่วคราวบางไฟล์ที่สร้างขึ้นในระหว่างการรวบรวมได้ถูกเพิ่มเข้าไปในโครงการโดยไม่ได้ตั้งใจ

ไฟล์เหล่านี้มาจากobj\Debugไดเรกทอรีดังนั้นจึงไม่ควรเพิ่มลงในโซลูชันอย่างแน่นอน บัตร*.csตัวแทนบ้าไปเล็กน้อยและเพิ่มอย่างไม่ถูกต้อง

การลบไฟล์เหล่านี้ช่วยแก้ไขปัญหา


9

ในกรณีของฉันมีที่โฟลเดอร์ย่อยในโครงการที่เป็นโฟลเดอร์โครงการมันด้วยตนเอง:

  • ระบบไฟล์:

    • C: \ โครงการ \ WebAPI \ wepapi.csproj
    • C: \ โครงการ \ WebAPI \ ทดสอบ \ wepapitests.csproj
  • สารละลาย

    • webapi (โฟลเดอร์และโครงการ)
      • การทดสอบ (โฟลเดอร์)
    • การทดสอบ (โฟลเดอร์และโครงการ)

จากนั้นฉันต้องลบ "การทดสอบ" ของโฟลเดอร์ย่อยออกจากโครงการ "webapi"


4

สำหรับฉันมันคือ AssembyInfo.cs และ SolutionInfo.cs มีค่าต่างกัน ดังนั้นตรวจสอบไฟล์เหล่านี้ด้วย ฉันเพิ่งลบเวอร์ชันจากหนึ่งในนั้น


3

ข้อผิดพลาดของฉันเกิดขึ้นเพราะอย่างใดมีโฟลเดอร์ obj ที่สร้างขึ้นภายในโฟลเดอร์ตัวควบคุมของฉัน เพียงค้นหาข้อมูลในแอปพลิเคชันของคุณเพื่อหาบรรทัดใน Assemblyinfo.cs ของคุณ อาจมีบางที่ซ้ำกัน


ฉันมีไฟล์. csproj (A) ในโฟลเดอร์อื่นที่เป็นของ. csproj (B) อีกอัน
taylorswiftfan

2

สิ่งนี้มักจะเกิดขึ้นกับฉันถ้าฉันรวบรวมโครงการใน Visual Studio 2017 แล้วฉันพยายามสร้างใหม่และเรียกใช้ด้วย. NET Core ด้วยคำสั่งบรรทัดคำสั่ง "dotnet run"

เพียงแค่ลบโฟลเดอร์ "bin" & "obj" ทั้งหมด - ทั้งภายใน "ClientApp" และโดยตรงในโฟลเดอร์โครงการ - อนุญาตให้ใช้คำสั่ง. NET Core "dotnet run" เพื่อสร้างใหม่และทำงานได้สำเร็จ


2

ต้องมีไฟล์ AssemblyInfo.cs อยู่ในโครงการที่นี่: ป้อนคำอธิบายรูปภาพที่นี่

วิธีแก้: - ลบ AssemblyInfo.cs อันใดอันหนึ่ง


1

อีกโซลูชันหนึ่งเมื่ออัปเกรดคอร์เป็น VS2017 คือการลบออกในไฟล์ properties \ assemblyinfo.cs

เนื่องจากตอนนี้พวกเขาถูกเก็บไว้ในโครงการ


1

ฉันพบคำตอบนี้ใน msdn ซึ่งอธิบายการทำเครื่องหมายไฟล์ว่าเป็นเนื้อหาจากนั้นคัดลอกไปยังเอาต์พุต = ถ้าใหม่กว่า ดูบทความด้านล่าง:

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

GH


1

ฉันเจอกันเมื่อลองเพิ่มเครื่องมือ GitVersion เพื่ออัปเดตเวอร์ชันของฉันใน AssemblyInfo.cs ใช้ VS2017 และ. NET Core project ดังนั้นฉันจึงผสมทั้งสองโลก AssemblyInfo.cs ของฉันมีเฉพาะข้อมูลรุ่นที่สร้างขึ้นโดยเครื่องมือ GitVersion csproj ของฉันมีสิ่งต่าง ๆ ใน remaingin โปรดทราบฉันไม่ได้ใช้<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มีทั้งหมดที่เกี่ยวข้องกับการประกอบ attributeu อื่น ๆ :

<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 ซึ่งสร้างการอ้างอิงที่ซ้ำกัน


สิ่งนี้ช่วยฉันได้มาก! โปรเจ็กต์หนึ่งอ้างถึงโครงการอื่นเป็นการอ้างอิงแบบ build-time แต่บั๊กใน 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 โครงการในไดเรกทอรีเดียวกัน ถ้าฉันมีไดเรกทอรีพร้อมโซลูชันและฉันวางไดเรกทอรีเว็บและข้อมูลแยกไว้ในนั้น


0

หากคุณมีปัญหานี้ใน Build Pipeline บน Azure DevOps ให้ลองสร้างคำสั่ง Build เป็น "เนื้อหา" และคัดลอกไปยังไดเรกทอรีผลลัพธ์เท่ากับ "คัดลอกถ้าใหม่กว่า" ในคุณสมบัติไฟล์ 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

มันลบการอ้างอิงที่ซ้ำกันทั้งหมดและโครงการก็สามารถสร้างได้อีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.