суббота, 5 апреля 2025 г.

GS, .Net 6.0, Giga, catalog, obj

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.cs

using 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).

Шаги для устранения ошибки:

  1. Удаление лишнего файла AssemblyInfo.cs:
    • Найди файл GS.AssemblyInfo.cs в своем проекте и удали его.
    • Этот файл автоматически генерируется инструментом MSBuild и не должен существовать в проекте вручную.
  2. Настройка атрибутов сборки в файле проекта (.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>
      • Здесь ты можешь указать все необходимые атрибуты сборки, такие как версия, компания, продукт и т.д.
    1. Очистка кэша MSBuild:
      • Удалив файл GS.AssemblyInfo.cs, ты устранишь причину конфликта.
      • Однако файл GS.AssemblyInfoInputs.cache может содержать кэшированные данные,
      • которые могут вызывать повторное появление ошибки. Рекомендуется очистить этот кэш:
        • В проводнике Windows перейди в каталог проекта и найди папку obj.
        • Внутри этой папки найди файл GS.AssemblyInfoInputs.cache и удали его.
        • Повтори попытку построения проекта.
    2. Повторное построение проекта:
      • После выполнения вышеуказанных действий снова собери проект.
      • Ошибка 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>

  1. Атрибуты сборки:
    • Все атрибуты, которые раньше находились в файле AssemblyInfo.cs,
    • теперь находятся непосредственно в секции <PropertyGroup> файла проекта.
    • Эти атрибуты задают версию сборки, версию файла, информационную версию, компанию, продукт и название.
  2. ImplicitUsings и Nullable:
    • Оставил параметры ImplicitUsings и Nullable, так как они помогают улучшить качество кода и удобство разработки.
  3. Удаление AssemblyInfo.cs:
    • Файл AssemblyInfo.cs больше не нужен, так как все атрибуты теперь заданы в проекте.
  4. Удаление AssemblyInfoInputs.cache:
    • Кэшированный файл AssemblyInfoInputs.cache также был удален,
    • чтобы исключить возможные конфликты при следующей сборке.

После внесения этих изменений, проект должен успешно собираться без ошибок, связанных с дублированием атрибутов сборки.

Как предотвратить автоматическую генерацию AssemblyInfo.cs

MSBuild по умолчанию создает файл AssemblyInfo.cs для каждого проекта, чтобы задать метаданные сборки.

Однако в .NET Core и более поздних версиях эти метаданные задаются в файле проекта (.csproj),

и наличие отдельного файла AssemblyInfo.cs становится избыточным.

Чтобы отключить его генерацию, нужно добавить специальное свойство в файл проекта.

Шаги для отключения автоматической генерации AssemblyInfo.cs

  1. Открой файл проекта (GS.csproj).
  2. Добавь следующий элемент в блок <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.
  • Теперь все метаданные сборки будут задаваться прямо в файле проекта.

Проверка результата

После сохранения изменений в файле проекта:

  1. Удали повторно появляющийся файл AssemblyInfo.cs, если он еще присутствует.
  2. Очисти кэшированные данные MSBuild, удалив содержимое папки obj в каталоге проекта.
  3. Попробуй пересобрать проект заново.

Теперь файл AssemblyInfo.cs больше не должен появляться, и проект должен компилироваться без ошибок.