Эквивалент AssemblyInfo в ядре dotnet/csproj

Поскольку ядро ​​dotnet вернулось в формат .csproj, есть новый автогенерированный MyProject.AssemblyInfo.cs, который содержит среди других.

[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]

Примечание, что это автоматически восстанавливается при каждой сборке. Ранее файл был найден в каталоге /obj/, теперь он отображается только в памяти, поскольку файл не может быть найден на диске, и щелчок сообщения об ошибке не открывает какой-либо файл.

Это сообщение об ошибке: введите описание изображения здесь

Поскольку они определены там, я не могу определить их сам в классическом AssemblyInfo.cs.

Где/как я могу определить компанию и версию проекта?

Ответ 1

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

Если вы хотите сохранить их в AssemblyInfo.cs, вы можете отключить автоматически сгенерированные атрибуты сборки.

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

Если вы хотите посмотреть, что происходит под капотом, проверьте Microsoft.NET.GenerateAssemblyInfo.targets внутри Microsoft.NET.Sdk.

Ответ 2

Эти настройки перенесены в файл .csproj.

По умолчанию они не отображаются, но вы можете найти их в Visual Studio 2017 на вкладке свойств проекта Package.

Project properties, tab Package

После сохранения эти значения можно найти в MyProject.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <Version>1.2.3.4</Version>
    <Authors>Author 1</Authors>
    <Company>Company XYZ</Company>
    <Product>Product 2</Product>
    <PackageId>MyApp</PackageId>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <FileVersion>3.0.0.0</FileVersion>
    <NeutralLanguage>en</NeutralLanguage>
    <Description>Description here</Description>
    <Copyright>Copyright</Copyright>
    <PackageLicenseUrl>License URL</PackageLicenseUrl>
    <PackageProjectUrl>Project URL</PackageProjectUrl>
    <PackageIconUrl>Icon URL</PackageIconUrl>
    <RepositoryUrl>Repo URL</RepositoryUrl>
    <RepositoryType>Repo type</RepositoryType>
    <PackageTags>Tags</PackageTags>
    <PackageReleaseNotes>Release</PackageReleaseNotes>
  </PropertyGroup>

На вкладке информации о свойствах проводника файлов FileVersion отображается как "Версия файла", а Version - как "Версия продукта".

Ответ 3

Я делаю следующее для своих проектов .NET Standard 2.0.

Создайте файл Directory.Build.props (например, в корне вашего репозитория) и переместите свойства для совместного использования из файла .csproj в этот файл.

MSBuild автоматически подберет его и применит к автоматически сгенерированному AssemblyInfo.cs.

Они также применяются к пакету dotnet pack при dotnet pack с dotnet pack или через пользовательский интерфейс в Visual Studio 2017.

См. Https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build.

Ответ 4

Вы всегда можете добавить свой собственный AssemblyInfo.cs, который пригодится для InternalsVisibleToAttribute, CLSCompliantAttribute и других, которые не генерируются автоматически.

Добавление AssemblyInfo.cs в проект

  1. В обозревателе решений щелкните правой кнопкой мыши <project name> > Add > New Folder.

Add New Folder

  1. Назовите папку "Свойства".

Name folder Properties

  1. Щелкните правой кнопкой мыши папку "Свойства" и выберите Add > New Item...

Add New Item

  1. Выберите "Класс" и назовите его "AssemblyInfo.cs".

Name file AssemblyInfo.cs

Подавление автоматически сгенерированных атрибутов

Если вы хотите переместить свои атрибуты обратно в AssemblyInfo.cs вместо того, чтобы автоматически генерировать их, вы можете подавить их в MSBuild, как указал natemcmaster в своем ответе.

Ответ 5

Я хочу расширить эту тему/ответы следующим. Как кто-то упомянул, эта автоматически сгенерированная AssemblyInfo может стать препятствием для внешних инструментов. В моем случае, используя FinalBuilder, у меня была проблема, что AssemblyInfo не обновлялась при сборке. По-видимому, FinalBuilder использует файл ~proj для поиска местоположения AssemblyInfo. Я подумал, это где-то в папке проекта. Нет. Итак, изменив это

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

выполнил только половину работы, он позволял настраиваемую информацию о сборке при сборке VS IDE/MS Build Но мне нужно было, чтобы FinalBuilder делал это тоже без ручных манипуляций с файлом информации о сборке. Мне нужно было удовлетворить все программы, MSBuild/VS и FinalBuilder.

Я решил это, добавив запись в существующий ItemGroup

<ItemGroup>
   <Compile Remove="Common\**" />
   <Content Remove="Common\**" />
   <EmbeddedResource Remove="Common\**" />
   <None Remove="Common\**" />
   <!-- new added item -->
   <None Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

Теперь, имея этот элемент, FinalBuilder находит местоположение AssemblyInfo и изменяет файл. Хотя действие None позволяет MSBuild/DevEnv игнорировать эту запись и больше не сообщать об ошибке, основанной на действии Compile, которое обычно поставляется с записью информации о сборке в файлах proj.

C:\Program Files\dotnet\sdk\2.0.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.targets(263,5): ошибка: повторяющиеся элементы "Компиляция" были включены..NET SDK по умолчанию включает элементы "Компиляция" из каталога вашего проекта. Вы можете удалить эти элементы из файла проекта или установить для свойства "EnableDefaultCompileItems" значение "false", если вы хотите явно включить их в файл проекта. Для получения дополнительной информации см. https://aka.ms/sdkimplicititems. Повторяющиеся элементы были: "AssemblyInfo.cs"

Ответ 6

Добавив ответ на NightOwl888, вы можете пойти еще дальше и добавить класс AssemblyInfo, а не просто класс:

enter image description here