web-dev-qa-db-fra.com

Équivalent à AssemblyInfo dans dotnet core/csproj

Depuis que dotnet core est revenu au format .csproj, il existe un nouveau MyProject.AssemblyInfo.cs généré automatiquement, qui contient entre autres.

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

Remarque que ceci est régénéré automatiquement chaque construction . Auparavant, le fichier était trouvé dans le répertoire/obj /, il semble maintenant être uniquement en mémoire, car le fichier ne peut pas être trouvé sur le disque et il est impossible de cliquer sur l'erreur. message n'ouvre aucun fichier.

C'est le message d'erreur:  enter image description here

Comme ils sont définis ici, je ne peux pas les définir moi-même dans le AssemblyInfo.cs classique.

Où/comment puis-je définir la société et la version d'un projet?

141
hultqvist

Comme vous l'avez déjà remarqué, vous pouvez contrôler la plupart de ces paramètres dans .csproj. 

Si vous préférez les conserver dans AssemblyInfo.cs, vous pouvez désactiver les attributs d'assembly générés automatiquement.

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

Si vous voulez voir ce qui se passe sous le capot, consultez Microsoft.NET.GenerateAssemblyInfo.targets à l'intérieur de Microsoft.NET.Sdk.

216
natemcmaster

Ces paramètres ont été déplacés dans le fichier .csproj.

Par défaut, ils ne s'affichent pas, mais vous pouvez les découvrir à partir de Visual Studio 2017 dans l'onglet Package des propriétés du projet.

 Project properties, tab Package

Une fois sauvegardées, ces valeurs peuvent être trouvées dans 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>

Dans l'onglet d'informations sur les propriétés de l'explorateur de fichiers, FileVersion apparaît en tant que "version du fichier" et Version en tant que "version du produit".

77
hultqvist

Je fais ce qui suit pour mes projets .NET Standard 2.0.

Créez un fichier Directory.Build.props (par exemple, à la racine de votre référentiel) Et déplacez les propriétés à partager du fichier .csproj vers ce fichier.

MSBuild le récupèrera automatiquement et l'appliquera au AssemblyInfo.cs généré automatiquement.

Ils sont également appliqués au paquet de pépites lors de la construction de l'un avec dotnet pack ou via l'interface utilisateur de Visual Studio 2017.

Voir https://docs.Microsoft.com/en-us/visualstudio/msbuild/customize-your-build

54
pfx

Vous pouvez toujours ajouter votre propre AssemblyInfo.cs, ce qui est pratique pour InternalsVisibleToAttribute, CLSCompliantAttribute et d'autres qui ne sont pas générés automatiquement.

Ajout de AssemblyInfo.cs à un projet

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur <project name> > Add > New Folder

 Add New Folder

  1. Nommez le dossier "Propriétés". 

 Name folder Properties

  1. Faites un clic droit sur le dossier "Propriétés", puis cliquez sur Add > New Item....

 Add New Item

  1. Sélectionnez "Classe" et nommez-le "AssemblyInfo.cs".

 Name file AssemblyInfo.cs

Supprimer les attributs générés automatiquement

Si vous souhaitez déplacer vos attributs vers AssemblyInfo.cs au lieu de les générer automatiquement, vous pouvez les supprimer dans MSBuild comme indiqué par natemcmaster dans sa réponse .

35
NightOwl888

En ajoutant à la réponse de NightOwl888, vous pouvez aller plus loin et ajouter une classe AssemblyInfo plutôt qu'une simple classe:

enter image description here

2
datchung

Je veux élargir ce sujet/réponses avec ce qui suit. Comme quelqu'un l'a mentionné, AssemblyInfo généré automatiquement peut constituer un obstacle pour les outils externes. Dans mon cas, avec FinalBuilder, j’ai eu un problème pour lequel AssemblyInfo n’était pas mis à jour par l’action de génération. Apparemment, FinalBuilder s'appuie sur le fichier ~proj pour rechercher l'emplacement de AssemblyInfo. Je pensais qu'il cherchait n'importe où dans le dossier du projet. Non, alors, changer cela 

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

n’avait que le travail, cela permettait des informations personnalisées sur l’Assemblée si elles étaient construites par VS IDE/MS Build. Mais j’avais besoin que FinalBuilder le fasse aussi sans manipulation manuelle dans le fichier d’information de l’Assemblée. J'avais besoin de satisfaire tous les programmes, MSBuild/VS et FinalBuilder.

J'ai résolu ce problème en ajoutant une entrée à la ItemGroup existante

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

Maintenant, ayant cet élément, FinalBuilder trouve l'emplacement de AssemblyInfo et modifie le fichier. Alors que l'action None autorise MSBuild/DevEnv à ignorer cette entrée et à ne plus signaler une erreur basée sur l'action Compile qui est généralement fournie avec l'entrée Info Assemblée dans les fichiers proj.

C:\Program Files\dotnet\sdk\2.0.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.targets (263,5): erreur: les éléments "Compiler" en double ont été inclus. Le kit de développement .NET inclut par défaut les éléments 'Compiler' de votre répertoire de projet. Vous pouvez supprimer ces éléments de votre fichier de projet ou définir la propriété 'EnableDefaultCompileItems' sur 'false' si vous souhaitez les inclure explicitement dans votre fichier de projet. Pour plus d'informations, voir https://aka.ms/sdkimplicititems . Les éléments en double étaient: 'AssemblyInfo.cs'

0
T.S.