Исправление «были включены повторяющиеся элементы «компиляции»». ошибка в Visual Studio

#msbuild #visual-studio-2019 #.net-5

#msbuild #visual-studio-2019 #.net-5

Вопрос:

Это очень раздражающая ошибка VS, я на VS 2019 16.8.1

Я трачу много времени на ее исправление:

Были включены повторяющиеся элементы «компиляции». .NET SDK по умолчанию включает элементы «компиляции» из вашего каталога проекта. Вы можете либо удалить эти элементы из файла вашего проекта, либо установить для свойства EnableDefaultCompileItems значение false, если хотите явно включить их в файл вашего проекта. Для получения дополнительной информации см. https://aka.ms/sdkimplicititems . Повторяющимися элементами были: служба Program.cs.Host Files dotnet sdk 5.0.101 Sdks Microsoft.NET.Sdk targets Microsoft.NET.Sdk.DefaultItems.targets 295

Я не могу понять, что вызывает эту ошибку. Я закомментировал Include теги в файлах * .csproj, но проблема в том, что у меня более 30 проектов, внезапно все они имеют одинаковую повторяющуюся ошибку, просмотр всех из них для исправления такой загадочной ошибки кажется небезопасным действием, некоторые из этих проектов являются устаревшими проектами, которые не имеютдолгое время не затрагивался. Еще одна проблема в решении, комментирующем Include теги, заключается в том, что у меня есть какой-то проект с такой структурой включения:

   <ItemGroup>
    <Compile Include="Contracts.cs" />
    <Compile Include="IKey.cs">
      <DependentUpon>Contracts.cs</DependentUpon>
    </Compile>
    <Compile Include="ISigner.cs">
      <DependentUpon>Contracts.cs</DependentUpon>
    </Compile>
  </ItemGroup>
 

комментарий это повлияет на структуру проекта.

Я попытался закомментировать CheckForDuplicateItems теги в файле:

«C:Program Filesdotnetsdk5.0.101 SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.DefaultItems.targets»,

и ошибки исчезли.

Редактировать

Я только что заметил, что версия .NET 5 (.. sdk 5.0.101 ..) включена в путь к целевому файлу, у меня есть только один проект с .NET 5, вызывает ли это проблему?

Комментарии:

1. Привет, есть какие-либо обновления по этой проблеме?

Ответ №1:

.NET5 использует проекты нового стиля, которые автоматически включают несколько файлов в ваш проект. Это помогает сохранить файлы проектов небольшими и не приводит к их извлечению и изменению при каждом добавлении, удалении или переименовании файла. Вероятно, самый простой способ исправить это для всех проектов сразу — добавить a directory.build.props в корневую папку вашего проекта, чтобы установить <EnableDefaultCompileItems>false<EnableDefaultCompileItems> для всех проектов сразу.

 <Project>
    <PropertyGroup>
         <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
    </PropertyGroup>
</Project>
 

Не редактируйте файлы в каталоге sdk, они являются настройками по умолчанию для всех текущих и будущих проектов. Вместо этого вы можете добавить эти настройки в файлы вашего проекта или в эти глобальные файлы каталога решений, чтобы изменить их для ваших проектов в определенной папке или решении.

См.:

Комментарии:

1. Как помещение «directory.build.props» в корень проекта повлияет на другие проекты?

2. Он автоматически установит это свойство для всех проектов без необходимости редактировать все файлы проекта. Поскольку это изменяет только поведение проектов .NET 5, это не изменит никакого поведения ваших существующих проектов .NET 4 при сборке. При создании проекта .NET 5 или проекта .NET 5 он отключит новое поведение по умолчанию и вернется к тому, как обстояли дела в .NET 4 для этих проектов.

3. directory.build.props повлияет на все файлы proj с того же уровня и подкаталога. Он действует вниз. И проблема в том, что, как сказал Джессехоуинг, новый проект sdk не добавляет элементы compile, content, none в файл proj. Время от времени он будет автоматически захватывать все файлы в вашем проекте. Это новая среда для нового sdk. Или вы должны использовать <EnableDefaultCompileItems>false</EnableDefaultCompileItems> , чтобы отключить эту функцию, а затем вручную прочитать элементы. Или вам нужно удалить все Compile элементы в вашем файле proj.

4. @mshwf, если ответ Джессехоуинга поможет вам справиться с проблемой, пожалуйста, не забудьте принять его. Если нет, пожалуйста, не стесняйтесь, сообщите нам об этом 🙂