web-dev-qa-db-fra.com

Attribut AssemblyVersion en double

J'ai un projet qui génère l'erreur suivante lors de la compilation:

erreur CS0579: attribut dupliqué 'AssemblyVersion'

J'ai vérifié le fichier AssemblyInfo.cs et il semble qu'il n'y ait pas de duplication.

J'ai trouvé cet article sur MSDN qui traite d'un problème similaire et suite à la suggestion proposée dans cet article, corrige le problème. 

Quelqu'un peut-il me dire ce qui se passe ici? Cela ne se produit-il que dans le cas de deux ou plusieurs projets avec des classes portant des noms similaires? Ou s'agit-il d'autre chose?

72
Aamir

Depuis que j’ai également rencontré ce problème dans le passé, je vais donc supposer que votre processus de construction fournit également des informations d’assemblée séparément pour fournir la gestion des versions. Et cela provoque une duplication car votre projet a également cette information dans le fichier AssembleyInfo.cs. Supprimez donc le fichier et je pense que cela devrait fonctionner.

73
luqi

À partir de Visual Studio 2017 , une autre solution pour continuer à utiliser le fichier AssemblyInfo.cs consiste à désactiver la génération automatique d'informations sur l'assemblage, comme suit:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>

Personnellement, je trouve cela très utile pour les projets qui doivent prendre en charge à la fois .NET Framework et .NET Standard.

88
Serge Semenov

J'ai eu la même erreur et étais sous la version de l'Assemblée et la version du fichier d'assemblage, donc en lisant la réponse de Luqi, je les ai simplement ajoutés sous forme de commentaires et l'erreur a été résolue.

// AssemblyVersion is the CLR version. Change this only when making breaking    changes
//[Assembly: AssemblyVersion("3.1.*")]
// AssemblyFileVersion should ideally be changed with each build, and should help identify the Origin of a build
//[Assembly: AssemblyFileVersion("3.1.0.0")]
13

Dans mon cas, certains fichiers temporaires * .cs générés lors de la compilation ont été ajoutés accidentellement au projet.

Les fichiers provenaient du répertoire obj\Debug; ils n'auraient donc absolument pas dû être ajoutés à la solution. Un wildcard *.cs est devenu un peu fou et ne les a pas ajoutés correctement.

La suppression de ces fichiers a résolu le problème.

7
Nate Barbettini

Lors de la conversion d'un projet plus ancien en .NET Core, la plupart des informations contenues dans AssemblyInfo.cs peuvent désormais être définies dans le projet lui-même. Ouvrez les propriétés du projet et sélectionnez l'onglet Package pour voir les nouveaux paramètres. 

Le message de Eric L. Anderson "L'attribut" System.Reflection.AssemblyCompanyAttribute "en double" décrit 3 options: 

  • supprimer les éléments en conflit du fichier AssemblyInfo.cs,
  • supprimer complètement le fichier ou
  • désactiver GenerateAssemblyInfo (comme suggéré dans une autre réponse de Serge Semenov )
7
Michael Freidgeim

Pour moi, c’était que AssembyInfo.cs et SolutionInfo.cs avaient des valeurs différentes. Vérifiez donc ces fichiers également. Je viens de supprimer la version de l'un d'eux.

4
Mariusz.W

Dans mon cas, il y avait un sous-dossier dans un projet qui était un dossier de projet lui-même:

  • système de fichiers:

    • c:\projects\webapi\wepapi.csproj
    • c:\projets\webapi\tests\wepapitests.csproj
  • solution

    • webapi (dossier et projet)
      • tests (dossier)
    • tests (dossier et projet)

Ensuite, j'ai dû supprimer le sous-dossier "tests" du projet "webapi".

3
heringer

Mon erreur est survenue car, d'une manière ou d'une autre, un dossier obj a été créé dans mon dossier contrôleurs. Il vous suffit de rechercher dans votre application une ligne dans votre Assemblyinfo.cs. Il peut y avoir un duplicata quelque part.

3
Dwayne Love

Cela se produit généralement pour moi si j'ai compilé le projet dans Visual Studio 2017 et que j'essaie ensuite de le reconstruire et de l'exécuter avec .NET Core à l'aide de la commande en ligne de commande "dotnet run".

La suppression de tous les dossiers "bin" et "obj" - à la fois dans "ClientApp" et directement dans le dossier du projet - a permis à la commande .NET Core "dotnet run" de reconstruire et de fonctionner correctement.

1
William

Mon erreur était que je faisais également référence à un autre fichier de mon projet, qui contenait également une valeur pour l'attribut "AssemblyVersion". J'ai supprimé cet attribut de l'un des fichiers et il fonctionne maintenant correctement.

La clé est de s'assurer que cette valeur n'est pas déclarée plus d'une fois dans aucun fichier de votre projet.

0
Antoine Dijoux

Je suis tombé sur la même chose lorsque j'ai essayé d'ajouter l'outil GitVersion pour mettre à jour ma version dans AssemblyInfo.cs. Utilisez le projet VS2017 et .NET Core. Alors je viens de mélanger les deux mondes. Mon AssemblyInfo.cs ne contient que les informations de version générées par l'outil GitVersion, mon csproj contient des éléments non essentiels Veuillez noter que je n'utilise pas <GenerateAssemblyInfo>false</GenerateAssemblyInfo> J'utilise des attributs liés à la version uniquement (voir ci-dessous). Plus de détails ici Propriétés AssemblyInfo .

AssemblyInfo.cs

[Assembly: AssemblyVersion("0.2.1.0")]
[Assembly: AssemblyFileVersion("0.2.1.0")]
[Assembly: AssemblyInformationalVersion("0.2.1+13.Branch.master.Sha.119c35af0f529e92e0f75a5e6d8373912d457818")]

my.csproj contient tous les attributs associés à assemblyu:

<PropertyGroup>
...
<Company>SOME Company </Company>
<Authors>Some Authors</Authors>
<Product>SOME Product</Product>
...
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute><GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>

 csproj maps to package tab at project properties

0
Alezis

J'ai trouvé cette réponse sur msdn, qui explique le marquage du fichier en tant que contenu, puis Copier en sortie = Si plus récent. Voir l'article ci-dessous: 

https://social.msdn.Microsoft.com/Forums/fr/8671bdff-9b16-4b49-ba9e-227cc4df31b2/compile-error-cs0579-duplicate-assemblyversion-attribute?forum=vsgatk

GH

0
Gary Henshall

Éditez vous AssemblyInfo.cs et #if! NETCOREAPP3_0 ... #endif

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an Assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an Assembly.

#if !NETCOREAPP3_0  

[Assembly: AssemblyTitle(".Net Core Testing")]
[Assembly: AssemblyDescription(".Net Core")]
[Assembly: AssemblyConfiguration("")]
[Assembly: AssemblyCompany("")]
[Assembly: AssemblyProduct(".Net Core")]
[Assembly: AssemblyCopyright("Copyright ©")]
[Assembly: AssemblyTrademark("")]
[Assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this Assembly not visible
// to COM components.  If you need to access a type in this Assembly from
// COM, set the ComVisible attribute to true on that type.
[Assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[Assembly: Guid("000b119c-2445-4977-8604-d7a736003d34")]

// Version information for an Assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [Assembly: AssemblyVersion("1.0.*")]
[Assembly: AssemblyVersion("1.0.0.0")]
[Assembly: AssemblyFileVersion("1.0.0.0")]

#endif
0
Sourcephy

Une autre solution lors de la mise à niveau de VS2017 de base consiste à les supprimer du fichier properties\assemblyinfo.cs.

Depuis, ils sont maintenant stockés dans le projet.

0
Thomas Koelle