Attribut AssemblyVersion en double

147

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

erreur CS0579: attribut 'AssemblyVersion' en double

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

J'ai trouvé cet article sur MSDN qui aborde un problème similaire et en suivant la suggestion de cet article, le problème est également résolu.

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

Aamir
la source
juste une supposition, mais avez-vous essayé de fermer et d'ouvrir à nouveau la solution? peut-être que cela pourrait le résoudre?
Stefto
4
Si vous convertissez un projet en .NET Core, voir elanderson.net/2017/06/…
Michael Freidgeim
J'utilise l'édition communautaire de Visual Studio 2017 sur Mac. J'avais une application console, puis j'ai ajouté une référence à un nouveau projet de bibliothèque de classes. Ces erreurs ont commencé à apparaître lorsque j'ai fait une compilation. Tout ce que j'ai fait a été de supprimer la référence au projet de bibliothèque de classes, puis de la rajouter et les erreurs ont disparu.
Flea

Réponses:

127

J'ai également rencontré ce problème dans le passé, je vais donc supposer que votre processus de construction fournit des informations d'assemblage séparément de la gestion des versions. Et cela provoque une duplication car votre projet a également cette information dans le AssemblyInfo.csfichier. Supprimez donc le fichier et je pense que cela devrait fonctionner.

luqi
la source
3
Donc, le processus de construction ne devrait-il pas écraser la AssemblyVersion existante au lieu de créer une nouvelle entrée? Je sais que notre processus de construction fait cela, mais je suis curieux de savoir pourquoi il n'écrase pas l'existant. Est-ce mal implémenté ou s'agit-il d'une limitation?
Aamir
Je pense que pour les assemblys .net, le meilleur moyen serait d'utiliser la méthode d'injection de version. Mais c'est une histoire distincte. Dans votre cas, le problème est qu'il existe différentes façons de fournir des versions d'assembly, via les paramètres de construction cmdline et via AssemblyInfo.cs et vous devez vous assurer qu'une seule méthode est utilisée car la duplication des attributs est une erreur de compilation .net.
luqi
supprimer quoi exactement?
roberto tomás le
196

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

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

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

Serge Semenov
la source
4
Oui, cela a fonctionné pour moi, la suppression des dossiers obj et bin ne suffisait pas.
Nick Josevski
Malheureusement, chaque fois que je change le .csprojfichier en utilisant ses pages de propriétés (Application, Build, Build Events, etc.), le PropertyGroupavec le GenerateAssemblyInfodisparaît :-(
Palo Mraz
3
Déplacez-le dans un fichier Directory.Build.props
Bryan
2
Y a-t-il un risque ou un résultat négatif possible avec cette solution?
mrcoulson
J'ai parfaitement résolu mon problème!
Daniel Maclean le
19

J'ai eu la même erreur et cela soulignait la Vesrion d'assemblage et la version du fichier d'assemblage, alors en lisant la réponse de Luqi, je les ai simplement ajoutées en tant que 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")]
Pantelitsa Mavrovounioti
la source
J'ai essayé ceci, et cela n'a rien changé dans mon cas :-(
Gertsen
18

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 sur 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 d'Eric L. Anderson "Duplicate 'System.Reflection.AssemblyCompanyAttribute' attribute" 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 )
Michael Freidgeim
la source
Je trouve plus intuitif et plus "Visual Studio" de spécifier ces attributs dans le projet ( .csproj), car ce sont des métadonnées au lieu de code qui décrivent la logique réelle. J'espère qu'à l'avenir, tout pourra être spécifié dans le projet! (Actuellement, je ne peux pas spécifier la visibilité COM, donc je la laisse dedans AssemblyInfo.cs.)
Franklin Yu
9

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

Les fichiers provenaient du obj\Debugrépertoire, ils n'auraient donc certainement pas dû être ajoutés à la solution. Un *.csjoker est devenu un peu fou et les a ajoutés de manière incorrecte.

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

Nate Barbettini
la source
9

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: \ projects \ 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".

heringer
la source
4

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

Mariusz.W
la source
3

Mon erreur s'est produite car, d'une manière ou d'une autre, il y avait un dossier obj créé dans mon dossier de contrôleurs. Faites simplement une recherche dans votre application pour une ligne dans votre Assemblyinfo.cs. Il peut y avoir un double quelque part.

Dwayne Love
la source
De même, j'avais un fichier .csproj (A) dans un autre dossier appartenant à un autre .csproj (B).
taylorswiftfan
2

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

La simple 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 se reconstruire et de s'exécuter avec succès.

William
la source
2

Il doit y avoir déjà un fichier AssemblyInfo.cs dans le projet ici: entrez la description de l'image ici

Pour résoudre: - Supprimez un AssemblyInfo.cs

Tejas Katakdhond
la source
1

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

Puisqu'ils sont maintenant stockés dans le projet.

Thomas Koelle
la source
1

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 VS2017 et le projet .NET Core. Alors j'ai juste mélangé les deux mondes. Mon AssemblyInfo.cs contient uniquement les informations de version qui ont été générées par l'outil GitVersion, mon csproj contient des choses remaingin. Veuillez noter que je n'utilise pas <GenerateAssemblyInfo>false</GenerateAssemblyInfo>J'utilise uniquement les attributs liés à la version (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 liés aux autres attributs assemblyu:

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

csproj mappe à l'onglet package dans les propriétés du projet

Alezis
la source
1

J'ai eu ce problème lorsque mon projet principal était dans le même dossier que la solution, puis j'avais un projet séparé dans la même solution situé dans un sous-dossier, et ce projet séparé utilisait le projet principal comme référence. Cela a amené le projet principal à détecter les sous-dossiers bin & obj qui créaient des références en double.

Mark Entingh
la source
Cela m'a beaucoup aidé! Un projet en a référencé un autre comme une dépendance au moment de la construction, mais un bogue dans le csproj a rendu les dossiers obj différents, générant cette erreur.
Chad Jessup le
0

Mon erreur était que je référençais également un autre fichier dans 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 un fichier de votre projet.

Antoine Dijoux
la source
0

Modifiez votre 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
Sourcephy
la source
0

J'ai eu cette erreur lorsque j'ai mis 2 projets dans le même répertoire. Si j'ai un répertoire avec une solution et que je mets un répertoire Web et Data séparé, il compile correctement.

Herman Van Der Blom
la source
0

Si vous rencontrez ce problème dans un pipeline de génération sur Azure DevOps, essayez de définir l'action de génération en tant que «Contenu» et Copier dans le répertoire de sortie égal à «Copier si plus récent» dans les propriétés du fichier AssembyInfo.cs.

Marcello Teófilo Fonteles
la source
0
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(15,12): error CS0579: Duplicate 'System.Reflection.AssemblyConfigurationAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(16,12): error CS0579: Duplicate 'System.Reflection.AssemblyFileVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(17,12): error CS0579: Duplicate 'System.Reflection.AssemblyInformationalVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(18,12): error CS0579: Duplicate 'System.Reflection.AssemblyProductAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(19,12): error CS0579: Duplicate 'System.Reflection.AssemblyTitleAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]
obj\Debug\netstandard2.0\PacktLibrary.AssemblyInfo.cs(20,12): error CS0579: Duplicate 'System.Reflection.AssemblyVersionAttribute' attribute [c:\Users\John_Tosh1\Documents\C#8.0and.NetCore3.0\Code\Chapter05\PacktLibrary\PacktLibrary.csproj]

Je crois que mon dossier Bibliothèque a été corrompu par une création par inadvertance d'une autre bibliothèque de classes.J'ai supprimé la bibliothèque et tous les fichiers associés mais le problème a persisté. J'ai trouvé une solution de contournement en supprimant TOUS les dossiers bin et obj du répertoire. La construction était correcte auparavant, mais a trouvé un sous-dossier contenant le même fichier assemblyinfo.cs.

John Flurkey
la source
0

Ce problème est un conflit de référence qui est principalement propre à VS 2017.

J'ai résolu cette même erreur en commentant simplement les lignes 7 à 14 ainsi que les codes de version d'assemblage en bas de la page sur AssemblyInfo.cs

Il a supprimé toutes les références en double et le projet a pu se reconstruire.

Adeakinwe
la source