Поскольку ядро dotnet вернулось к .csproj
формату, появился новый автоматически созданный, MyProject.AssemblyInfo.cs
который содержит среди прочего.
[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]
Обратите внимание, что это автоматически восстанавливается при каждой сборке. Ранее файл был найден в каталоге / obj /, теперь он, похоже, находится только в памяти, так как файл не может быть найден на диске, а нажатие на сообщение об ошибке не открывает файл.
Так как они определены там, я не могу определить их сам в классическом AssemblyInfo.cs
.
Где / как я могу определить компанию и версию проекта?
Ответы:
Как вы уже заметили, вы можете контролировать большинство этих настроек в .csproj.
Если вы предпочитаете хранить их в AssemblyInfo.cs, вы можете отключить автоматически созданные атрибуты сборки.
Если вы хотите увидеть, что происходит под капотом, загляните в Microsoft.NET.GenerateAssemblyInfo.targets внутри Microsoft.NET.Sdk.
источник
Эти настройки перенесены в файл .csproj.
По умолчанию они не отображаются, но вы можете найти их в Visual Studio 2017 на
Package
вкладке свойств проекта .После сохранения эти значения можно найти в
MyProject.csproj
На вкладке сведений о свойствах проводника файлов
FileVersion
отображается как «Версия файла» иVersion
как «Версия продукта».источник
Class Library (.NET Standard)
. У тебя есть идеи почему? Я использую версию 15.1, выпуск 26403.7, Community Edition.Я делаю следующее для своих проектов .NET Standard 2.0.
Создайте
Directory.Build.props
файл (например, в корне вашего репозитория) и переместите свойства, которые будут доступны из.csproj
файла, в этот файл.MSBuild подберет его автоматически и применяет к автоматически сгенерированным
AssemblyInfo.cs
.Они также применяются к пакету nuget при его создании с
dotnet pack
помощью или с помощью пользовательского интерфейса в Visual Studio 2017.См. Https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build.
источник
Вы всегда можете добавить свой собственный AssemblyInfo.cs , который пригодится
InternalsVisibleToAttribute
,CLSCompliantAttribute
и другие, которые не генерируются автоматически.Добавление AssemblyInfo.cs в проект
<project name> > Add > New Folder
.Add > New Item...
.Подавление автоматически сгенерированных атрибутов
Если вы хотите переместить свои атрибуты обратно в AssemblyInfo.cs вместо того, чтобы автоматически генерировать их, вы можете подавить их в MSBuild, как указал natemcmaster в своем ответе .
источник
Добавив ответ на NightOwl888, вы можете пойти еще дальше и добавить
AssemblyInfo
класс, а не просто класс:источник
Я хочу расширить эту тему / ответы следующим. Как кто-то упомянул, эта автоматически сгенерированная AssemblyInfo может стать препятствием для внешних инструментов. В моем случае, используя FinalBuilder , у меня была проблема, что AssemblyInfo не обновлялась действием сборки. Очевидно, FinalBuilder использует
~proj
файл для поиска местоположения AssemblyInfo . Я подумал, это было где-нибудь в папке проекта. Нет. Итак, меняя этовыполнил только половину работы, он позволил пользовательскую информацию о сборке, если построен VS IDE / MS Build. Но мне нужен был FinalBuilder тоже делал это без ручных манипуляций с файлом информации о сборке. Мне нужно было удовлетворить все программы, MSBuild / VS и FinalBuilder.
Я решил это, добавив запись в существующий
ItemGroup
Теперь, имея этот элемент, FinalBuilder находит местоположение AssemblyInfo и модифицирует файл. Хотя действие
None
позволяет MSBuild / DevEnv игнорировать эту запись и больше не сообщать об ошибке, основанной наCompile
действии, которое обычно идет с записью сведений о сборке вproj
файлах.источник