GS, .Net 6.0, Giga, catalog, obj
Перенос проекта из NetFramework в .Net српровождается генерацией лишних файов в каталоге obj.
https://giga.chat/link/gcsOiYjKbS
D:\VC25\gs.trade.core\GS06\GS\GS\GS.csproj
GS.AssemblyInfo.csusing System; using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("GS")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] [assembly: System.Reflection.AssemblyProductAttribute("GS")] [assembly: System.Reflection.AssemblyTitleAttribute("GS")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.
GS.AssemblyInfoInputs.cache Содержимое 1c5ce82923f77112177909e2681dc3494609a3da85a77a940d542028597ac932
------------------------------
Причина возникновения ошибки
В .NET Core и последующих версиях сборочные атрибуты управляются через файл проекта (.csproj),
а не через отдельные файлы, такие как AssemblyInfo.cs. Однако при переносе проекта с
.NET Framework файл AssemblyInfo.cs может остаться в проекте, вызывая конфликты с настройками в .csproj.
Решение проблемы
Чтобы устранить эту ошибку, необходимо удалить лишние атрибуты из файла AssemblyInfo.cs и переместить их в файл проекта (.csproj).
Шаги для устранения ошибки:
- Удаление лишнего файла AssemblyInfo.cs:
- Найди файл GS.AssemblyInfo.cs в своем проекте и удали его.
- Этот файл автоматически генерируется инструментом MSBuild и не должен существовать в проекте вручную.
- Настройка атрибутов сборки в файле проекта (.csproj):
- Открой файл GS.csproj и найди секцию, содержащую информацию о сборке. Она может выглядеть примерно так:
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <!-- Добавь сюда необходимые атрибуты --> <AssemblyVersion>1.0.0.0</AssemblyVersion> <FileVersion>1.0.0.0</FileVersion> <InformationalVersion>1.0.0</InformationalVersion> <Company>GS</Company> <Product>GS</Product> <Copyright>Copyright © GS</Copyright> </PropertyGroup>
- Здесь ты можешь указать все необходимые атрибуты сборки, такие как версия, компания, продукт и т.д.
- Очистка кэша MSBuild:
- Удалив файл GS.AssemblyInfo.cs, ты устранишь причину конфликта.
- Однако файл GS.AssemblyInfoInputs.cache может содержать кэшированные данные,
- которые могут вызывать повторное появление ошибки. Рекомендуется очистить этот кэш:
- В проводнике Windows перейди в каталог проекта и найди папку obj.
- Внутри этой папки найди файл GS.AssemblyInfoInputs.cache и удали его.
- Повтори попытку построения проекта.
- Повторное построение проекта:
- После выполнения вышеуказанных действий снова собери проект.
- Ошибка
CS0579должна исчезнуть.Дополнительные рекомендации
- Удаление неиспользуемых файлов:
- Убедись, что в проекте отсутствуют другие ненужные файлы,
- оставшиеся после переноса с .NET Framework.
- Использование инструментов миграции:
- Существуют специальные инструменты для автоматической миграции проектов с .NET Framework на .NET Core,
- такие как try-convert от Microsoft. Они могут значительно упростить процесс переноса.
Окончательный файл.<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <!-- Атрибуты сборки --> <AssemblyVersion>1.0.0.0</AssemblyVersion> <FileVersion>1.0.0.0</FileVersion> <InformationalVersion>1.0.0</InformationalVersion> <Company>GS</Company> <Product>GS</Product> <Title>GS</Title> <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> </PropertyGroup> </Project>
- Атрибуты сборки:
- Все атрибуты, которые раньше находились в файле
AssemblyInfo.cs,- теперь находятся непосредственно в секции
<PropertyGroup>файла проекта.- Эти атрибуты задают версию сборки, версию файла, информационную версию, компанию, продукт и название.
- ImplicitUsings и Nullable:
- Оставил параметры
ImplicitUsingsиNullable, так как они помогают улучшить качество кода и удобство разработки.- Удаление AssemblyInfo.cs:
- Файл
AssemblyInfo.csбольше не нужен, так как все атрибуты теперь заданы в проекте.- Удаление AssemblyInfoInputs.cache:
- Кэшированный файл
AssemblyInfoInputs.cacheтакже был удален,- чтобы исключить возможные конфликты при следующей сборке.
После внесения этих изменений, проект должен успешно собираться без ошибок, связанных с дублированием атрибутов сборки.
Как предотвратить автоматическую генерацию AssemblyInfo.cs
MSBuild по умолчанию создает файл AssemblyInfo.cs для каждого проекта, чтобы задать метаданные сборки.
Однако в .NET Core и более поздних версиях эти метаданные задаются в файле проекта (.csproj),
и наличие отдельного файла AssemblyInfo.cs становится избыточным.
Чтобы отключить его генерацию, нужно добавить специальное свойство в файл проекта.
Шаги для отключения автоматической генерации AssemblyInfo.cs
- Открой файл проекта (GS.csproj).
- Добавь следующий элемент в блок
<PropertyGroup>:<GenerateAssemblyInfo>false</GenerateAssemblyInfo>Это отключит автоматическую генерацию файла AssemblyInfo.cs для данного проекта.
Полный файл проекта (GS.csproj) теперь будет выглядеть так:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <!-- Отключение автоматической генерации AssemblyInfo.cs --> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <!-- Атрибуты сборки --> <AssemblyVersion>1.0.0.0</AssemblyVersion> <FileVersion>1.0.0.0</FileVersion> <InformationalVersion>1.0.0</InformationalVersion> <Company>GS</Company> <Product>GS</Product> <Title>GS</Title> <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> </PropertyGroup> </Project>
Пояснения:
- GenerateAssemblyInfo: Это свойство отключает автоматическую генерацию файла
AssemblyInfo.cs.- Теперь все метаданные сборки будут задаваться прямо в файле проекта.
Проверка результата
После сохранения изменений в файле проекта:
- Удали повторно появляющийся файл
AssemblyInfo.cs, если он еще присутствует.- Очисти кэшированные данные MSBuild, удалив содержимое папки
objв каталоге проекта.- Попробуй пересобрать проект заново.
Теперь файл AssemblyInfo.cs больше не должен появляться, и проект должен компилироваться без ошибок.