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

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

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

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

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

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

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

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

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

  false  

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

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

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

Свойства проекта, вкладка Пакет

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

   net461 1.2.3.4 Author 1 Company XYZ Product 2 MyApp 2.0.0.0 3.0.0.0 en Description here Copyright License URL Project URL Icon URL Repo URL Repo type Tags Release  

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

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

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

MSBuild автоматически подберет его и применит к автогенерируемому AssemblyInfo.cs. Они также применяются к пакету nuget при построении одного через, например, пакет dotnet или через интерфейс в Visual Studio 2017.

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

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

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

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

Добавить новую папку

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

Свойства папки имен

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

Добавить новый элемент

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

Файл имен AssemblyInfo.cs

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

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

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

  false  

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

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

         

Теперь, имея этот элемент, FinalBuilder находит местоположение AssemblyInfo и изменяет файл. В то время как действие None позволяет MSBuild / DevEnv игнорировать эту запись и больше не сообщать об ошибке на основе действия Compile которое обычно поставляется с записью Assembly Info в файлах 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»

  • Установщик WiX msi не устанавливает приложение Winform, созданное с помощью Visual Studio 2017
  • Могу ли я записывать / воспроизводить macros в Visual Studio 2012/2013/2015/2017?
  • Знаю ли я, нужен ли мне Multi-Dex? (ClassNotFoundException)
  • Единичные тесты, не обнаруженные в Visual Studio 2017
  • Как я могу установить версию msbuild VS2017 на сервере сборки без установки IDE?
  • Давайте будем гением компьютера.