2012-04-25 2 views
39

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

CS0579 Ошибка: атрибут Duplicate «AssemblyVersion»

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

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

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

+0

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

+0

Если преобразование проекта в .NET Core, см. Https://elanderson.net/2017/06/duplicate-system-reflection-assemblycompanyattribute-attribute/ –

ответ

44

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

+2

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

+0

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

4

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

8

Я имел ту же ошибку и сошку Ассамблея 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")] 
4

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

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

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

0

Моя ошибка заключалась в том, что я также ссылался на другой файл в моем проекте, который также содержал значение для атрибута «AssemblyVersion». Я удалил этот атрибут из одного из файлов, и теперь он работает правильно.

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

1

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

22

Начиная с Visual Studio 2017 другое решение продолжать использовать файл AssemblyInfo.cs это отключить автоматическую генерацию сборки информации, как это:

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

Я лично считаю, что очень полезно для проектов, которые нуждаются в поддержке и .NET Framework и .NET Standard.

+0

Да, что сработало для меня, удалить папки obj и bin недостаточно. –

+0

К сожалению, каждый раз, когда я меняю файл '.csproj', используя его страницы свойств (Application, Build, Build Events и т. Д.),' PropertyGroup' с 'GenerateAssemblyInfo' исчезает :-( –

3

При преобразовании старого проекта в .NET Core большая часть информации, которая была в AssemblyInfo.cs, теперь может быть установлена ​​на самом проекте. Откройте свойства проекта и выберите вкладку «Пакет», чтобы увидеть новые настройки.

Eric L. Anderson's post "Duplicate ‘System.Reflection.AssemblyCompanyAttribute’ attribute" описывает 3 варианта:

  • удалить конфликтующие элементы из файла AssemblyInfo.cs,
  • полностью удалить файл или
  • отключить GenerateAssemblyInfo (как это было предложено в another answer by Serge Semenov)
+0

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

0

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

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

0

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

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

    • C: \ Проекты \ WebAPI \ wepapi.csproj
    • C: \ проекты \ WebAPI \ тесты \ wepapitests.csproj
  • решение

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

Тогда я должен был удалить подпапку " тесты "из проекта" webapi ".

Смежные вопросы