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


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

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

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

это сообщение об ошибке :

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

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

5 122

5 ответов:

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

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

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

Если вы хотите увидеть, что происходит под капотом, в кассу Майкрософт.Чистая.GenerateAssemblyInfo.цели внутри Microsoft.Чистая.СДК.

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

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

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 отображается как "версия продукта"

Я делаю следующее Для моих проектов .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 к проекту

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

Add New Folder

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

Name folder Properties

  1. право нажмите на папку "свойства" и нажмите Add > New Item....

Add New Item

  1. выберите " класс "и назовите его" AssemblyInfo.цезий."

Name file AssemblyInfo.cs

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

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

Я хочу расширить эту тему/ответы со следующим. Как кто-то упомянул, это автоматически генерируется 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 файлы\dotnet ограничителя\СДК\2.0.2\пакеты SDK\Майкрософт.Чистая.\SDK построения\от Microsoft.Чистая.СДК.DefaultItems.целевые показатели(263,5): ошибка: были включены повторяющиеся элементы "компиляции". .NET SDK включает в себя элементы "компиляции" из каталога проекта с помощью по умолчанию. Вы можете либо удалить эти элементы из файла проекта, либо установить для свойства 'EnableDefaultCompileItems' значение 'false', если вы хотите явно включить их в файл проекта. Для получения дополнительной информации см. раздел https://aka.ms/sdkimplicititems. Повторяющиеся элементы были: 'отличается.cs'