it-swarm.com.ru

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

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

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

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

Это сообщение об ошибке:  enter image description here

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

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

141
hultqvist

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

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

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

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

216
natemcmaster

Эти настройки перенесены в файл .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 отображается как «Версия продукта»

77
hultqvist

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

54
pfx

Вы всегда можете добавить свой собственный 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 в своем ответе .

35
NightOwl888

Я хочу расширить эту тему/ответы следующим. Как уже упоминалось, этот автоматически сгенерированный 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»

0
T.S.