Повторяющийся атрибут AssemblyVersion


164

У меня есть проект, который генерирует следующую ошибку при компиляции:

ошибка CS0579: повторяющийся атрибут AssemblyVersion

Я проверил файл AssemblyInfo.csи похоже, что там нет дубликатов.

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

Кто-нибудь может сказать мне, что здесь происходит? Это происходит только в случае наличия двух и более проектов с похожими именами классов? Или что-то еще?


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

4
Если вы конвертируете проект в .NET Core, см. Elanderson.net/2017/06/…
Майкл

Я использую Visual Studio 2017 Community Edition на Mac. У меня было консольное приложение, а затем я добавил ссылку на новый проект библиотеки классов. Эти ошибки начали появляться, когда я делал сборку. Все, что я сделал, это удалил ссылку на проект библиотеки классов, а затем добавил ее обратно, и ошибки исчезли.
Flea

Ответы:


134

Я также сталкивался с этой проблемой в прошлом, поэтому предполагаю, что ваш процесс сборки предоставляет информацию о сборке отдельно от обеспечения управления версиями. И это вызывает дублирование, поскольку в вашем проекте также есть эта информация в AssemblyInfo.csфайле. Так что удалите файл, и я думаю, он должен работать.


3
Итак, не следует ли в процессе сборки перезаписывать существующую AssemblyVersion вместо создания новой записи? Я знаю, что наш процесс сборки делает это, но мне любопытно, почему он не перезаписывает существующий. Это плохо реализовано или это ограничение?
Aamir

Я думаю, что для сборок .net лучшим способом было бы использовать метод внедрения версии. Но это отдельная история. В вашем случае проблема в том, что существуют разные способы предоставления версий сборки, через параметры сборки cmdline и через AssemblyInfo.cs, и вы должны убедиться, что используется только один метод, поскольку дублирование атрибутов является ошибкой компиляции .net.
luqi

что именно удалить?
Роберто Томас,

209

Начиная с 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

Отлично исправил мою проблему!
Дэниел Маклин,

21

У меня была такая же ошибка, и в ней подчеркивались версия сборки и версия файла сборки, поэтому, прочитав ответ 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 варианта:

  • удалите конфликтующие элементы из файла AssemblyInfo.cs,
  • полностью удалить файл или
  • отключить GenerateAssemblyInfo (как предлагается в другом ответе Сергея Семенова )

Я считаю более интуитивно понятным и более "Visual Studio" указывать эти атрибуты в проекте ( .csproj), потому что они являются метаданными, а не кодом, описывающим реальную логику. Надеюсь, в будущем в проекте можно будет все уточнить! (В настоящее время я не могу указать видимость COM, поэтому оставляю это AssemblyInfo.cs.)
Франклин Ю

9

В моем случае в проект случайно были добавлены временные файлы * .cs, созданные во время компиляции.

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

Удаление этих файлов устранило проблему.


9

В моем случае это вложенная папка в проекте, которая сама была папкой проекта:

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

    • c: \ проекты \ webapi \ wepapi.csproj
    • c: \ проекты \ webapi \ tests \ wepapitests.csproj
  • решение

    • webapi (папка и проект)
      • тесты (папка)
    • тесты (папка и проект)

Затем мне пришлось удалить подпапку «тесты» из проекта «webapi».


4

Для меня это было то, что AssembyInfo.cs и SolutionInfo.cs имели разные значения. Так что проверьте и эти файлы. Я только что удалил версию с одного из них.


3

Моя ошибка возникла из-за того, что каким-то образом внутри моей папки контроллеров была создана папка obj. Просто поищите в своем приложении строку внутри Assemblyinfo.cs. Возможно где-то есть дубликат.


Точно так же у меня был файл .csproj (A) внутри другой папки, принадлежащей другому .csproj (B).
taylorswiftfan,

2

Еще одно решение при обновлении ядра до VS2017 - удалить их в файле properties \ assemblyinfo.cs.

Поскольку они сейчас хранятся в проекте.


2

Обычно это происходит со мной, если я скомпилировал проект в Visual Studio 2017, а затем попытаюсь перестроить и запустить его с .NET Core с помощью команды командной строки «dotnet run».

Простое удаление всех папок «bin» и «obj» - как внутри «ClientApp», так и непосредственно в папке проекта - позволило команде .NET Core «dotnet run» успешно перестроить и запустить.


2

Я столкнулся с тем же, когда попытался добавить инструмент GitVersion для обновления моей версии в AssemblyInfo.cs. Используйте проект VS2017 и .NET Core. Так что я просто смешал оба мира. Мой AssemblyInfo.cs содержит только информацию о версии, сгенерированную инструментом GitVersion, мой csproj содержит оставшиеся вещи. Обратите внимание: я не использую, <GenerateAssemblyInfo>false</GenerateAssemblyInfo>я использую только атрибуты, относящиеся к версии (см. Ниже). Подробнее здесь AssemblyInfo properties .

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>

csproj сопоставляется с вкладкой пакета в свойствах проекта




1

У меня была эта проблема, когда мой основной проект находился в той же папке, что и решение, тогда у меня был отдельный проект в том же решении, расположенный во вложенной папке, и этот отдельный проект использовал основной проект в качестве ссылки. Это привело к тому, что основной проект обнаружил подпапки bin и obj, которые создавали повторяющиеся ссылки.


Это мне очень помогло! Один проект ссылался на другой как на зависимость времени сборки, но ошибка в csproj привела к тому, что папки obj изменились, что привело к возникновению этой ошибки.
Чад Джессап,

1

Если у вас возникла эта проблема в конвейере сборки в Azure DevOps, попробуйте указать действие сборки как «Содержимое» и «Копировать в выходной каталог», равное «Копировать, если новее» в свойствах файла AssembyInfo.cs.


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 проекта в один каталог. Если у меня есть каталог с решением, и я помещаю в него отдельный каталог Web и Data, он компилируется правильно.


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.

Он удалил все повторяющиеся ссылки, и проект можно было построить снова.


0

Мне пришлось удалить все репо и клонировать новую копию, чтобы заставить ее работать.

Я попытался удалить все упомянутые выше файлы, но это не сработало.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.