Дублікат атрибута AssemblyVersion


147

У мене є проект, який створює таку помилку при компіляції:

помилка CS0579: Дублікат атрибута 'AssemblyVersion'

Я перевірив файл AssemblyInfo.csі, схоже, там немає дублювання.

Я знайшов цю статтю на MSDN, яка вирішує подібну проблему, і, слідуючи пропозиціям у цій статті, також виправляється проблема.

Хтось може сказати мені, що тут відбувається? Чи трапляється це лише у випадку наявності двох або більше проектів із класами, що мають схожі назви? Або це щось інше?


тільки здогадка, але ви спробували закрити це і знову відкрити рішення? можливо, це може вирішити це?
Стефто

4
Якщо ви перетворюєте проект на .NET Core, див. Elanderson.net/2017/06/…
Michael Freidgeim

Я використовую випуск спільноти Visual Studio 2017 на Mac. У мене був консольний додаток, а потім я додав посилання на новий проект бібліотеки класів. Ці помилки почали з’являтися, коли я робив збірку. Все, що я зробив, було видалити посилання на проект бібліотеки класів, а потім додати його назад і помилки усунулися.
блоха

Відповіді:


127

У цій проблемі я також раніше стикався, тому я буду припускати, що ваш процес збирання містить інформацію про збірку окремо для надання версій. І це спричиняє дублювання, оскільки ваш проект також містить цю інформацію у AssemblyInfo.csфайлі. Тому видаліть файл, і я думаю, він повинен працювати.


3
Отже, чи не повинен процес складання замінювати існуючий AssemblyVersion замість створення нового запису? Я знаю, що наш процес збирання робить це, але мені цікаво, чому він не замінює існуючий. Це погано реалізовано чи це обмеження?
Аамір

Я думаю, що для .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 було недостатньо.
Нік Хосевський

На жаль, щоразу, коли я змінюю .csprojфайл за допомогою його сторінок властивостей (додаток, збирання, збирання подій тощо), PropertyGroupпри цьому GenerateAssemblyInfoзникає :-(
Palo Mraz

3
Перемістіть його у файл Directory.Build.props
Брайан,

2
Чи можливий якийсь ризик чи негативний результат за допомогою цього рішення?
mrcoulson

Виправлена ​​моя проблема ідеально!
Даніель Маклін

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")]

Я спробував це, і це нічого не змінило в моєму випадку :-(
Герцен

18

Перетворюючи старіший проект у .NET Core, більшість інформації, яка знаходилась у AssemblyInfo.cs, тепер можна встановити на сам проект. Відкрийте властивості проекту та виберіть вкладку Пакет, щоб побачити нові настройки.

Повідомлення атрибута "Дублікат" System.Reflection.AssemblyCompanyAttribute 'атрибута Еріка Андерсона описує 3 варіанти:


Мені здається більш інтуїтивно зрозумілим і більш "Visual Studio" визначати ці атрибути в проекті ( .csproj), оскільки вони є метаданими замість коду, що описують фактичну логіку. Я сподіваюсь, що в майбутньому все можна буде вказати в проекті! (Наразі я не можу вказати видимість COM, тому залишаю його AssemblyInfo.cs.)
Франклін Ю

9

У моєму випадку деякі тимчасові файли * .cs, створені під час компіляції, випадково були додані до проекту.

Файли були з obj\Debugкаталогу, тому їх точно не слід було додавати до рішення. *.csСимволи пішов трохи божевільний і додав їх неправильно.

Видалення цих файлів вирішило проблему.


9

У моєму випадку там, де підпапка в проекті, яка була папкою проекту, - це само:

  • файлова система:

    • с: \ проекти \ webapi \ wepapi.csproj
    • с: \ проекти \ 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" відновитись і запуститись успішно.



1

Ще одне рішення при модернізації ядра до VS2017 - це видалити їх у файлі властивостей \ Assemblyinfo.cs.

Оскільки вони зараз зберігаються в проекті.



1

Я натрапив на те саме, коли спробував додати інструмент GitVersion, щоб оновити свою версію в AssemblyInfo.cs. Використовуйте проект 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

У мене виникло це питання, коли мій головний проект знаходився в тій самій папці, що і рішення, тоді у мене був окремий проект у тому самому рішенні, що знаходився в підпапці, і цей окремий проект використовував основний проект як орієнтир. Це призвело до того, що основний проект виявив підпапки бін & 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 проекти в один каталог. Якщо у мене є каталог з рішенням, і я поміщаю в нього окремий каталог веб і даних, він збирається правильно.


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.

Цю цю помилку я вирішив, просто прокоментувавши рядки 7 -14, а також коди версій зборки внизу сторінки на AssemblyInfo.cs

Це видалило всі повторювані посилання, і проект вдалося створити заново.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.