web-dev-qa-db-fra.com

Comment le fichier licences.licx est utilisé

J'ai un fichier licenses.licx qui est inclus dans l'une des propriétés de mes projets. Je ne suis pas sûr de savoir comment cela est utilisé par ses dll. Est-il utilisé par msbuild? Avez-vous une idée de son utilisation lorsque la solution est en construction?

42
CharithJ

Licenses.licx file woes

Fichier ceci sous ASP.NET, département de WTF.

Frustration Lorsque vous développez une application Web avec notre Contrôles, un fichier mystérieux appelé licences.licx apparaît. Non ce n'est pas un ordre d'utiliser un Lollipop bizarrement nommé, mais c'est un fichier de transition généré (et modifié) par Visual Studio qui participe à la licence vérification. En mode Création, Visual Studio utilise ce fichier pour créer une note de chaque contrôle sous licence que vous utilisez dans votre conception. Quand vous construisez alors votre application, Visual Studio lit ce fichier licenses.licx et pour chaque contrôle mentionné ici chargera l’Assemblée concernée et exécutera le code de licence dans cette assemblée pour voir si elle est correctement assemblée sous licence (c’est-à-dire que le produit auquel il appartient a été correctement installé sur cette machine). Si tout se passe bien, Visual Studio intègre la clé de licence dans l'exécutable. Si ce n'est pas le cas, vous obtiendrez des messages d'erreur étranges sur le fait que le contrôle n'est pas sous licence (Mon favori est "Impossible de transformer le fichier de licences 'licences.licx' en une ressource binaire." auquel j'appelle généralement le langage coloré de mes ancêtres).

Licenses.licx est en réalité un fichier dans votre solution (si vous ne pouvez pas le voir Ici, cliquez sur Afficher tous les fichiers). Visual Studio utilise un programme appelé lc.exe pour compiler les licences en ressources incorporées dans votre fichier application, et quand les choses ne vont pas avec la licence compiler j'ai vu les messages d'erreur qui font également référence à cet exécutable.

Voici un exemple de ligne dans un fichier licences.licx.

DevExpress.XtraCharts.Web.WebChartControl, DevExpress.XtraCharts.v8.2.Web, Version = 8.2.4.0, Culture = neutre, PublicKeyToken = 9b171c9fd64da1d1

La première valeur de cette liste délimitée par des virgules est la classe, la seconde est l’Assemblée où il se trouve, et les autres valeurs sont le reste de le nom fort de l'Assemblée. Je suis sûr que vous pouvez déjà voir des problèmes, surtout lorsque vous mettez à niveau une solution vers les dernières versions du fichier contrôles tiers que vous utilisez. Si vous le souhaitez, vous pouvez éditer ce fichier et supprimez les parties du nom fort sans problème.

Mais ce n'est pas le plus gros problème avec licences.licx. La chose est Visual Studio a tendance à toucher ce fichier si vous ouvrez le fichier solution (c'est "toucher" comme en changeant la date du fichier en date/heure actuelle). Cela fait des dégâts avec les licences, surtout si vous arrive ouvrir la solution sur une machine sans licence et vous utilisez contrôle de source. Soudainement, votre machine de compilation les rejettera "ne peut pas transformer" les messages et vous vous demandez ce qui ne va pas . Un autre problème récurrent concerne les équipes de développeurs qui travaillent sur une solution: ils sont tous inconsciemment "modifiant" ce fichier.

La solution semble donc être de ne pas placer le fichier licenses.licx sous contrôle de source. (article de la base de connaissances)

Mais cette solution au problème jette un autre drapeau rouge: si un de les développeurs d'une équipe ajoutent un nouveau contrôle qui nécessite une licence pour Dans le formulaire, une ligne est ajoutée à son fichier licences.licx local et peut être pas se refléter dans le contrôle de source. Bam, votre machine de compilation échoue le construire et Joe, qui a ajouté le contrôle, doit acheter des beignets pour le équipe jusqu'à ce que quelqu'un d'autre casse la construction.

Je crains de ne pas avoir de bonne solution à ce dernier problème, car malheureusement, le message "ne pas mettre licences.licx dans le contrôle de source" semble être être la façon dont tout le monde résout le problème des licences. Un autre La solution consiste à supprimer complètement le fichier licences.licx, puis à obtenir le fichier Visual Studio pour le régénérer en ouvrant la solution (bien que ceci Soit un peu difficile sur une machine de construction).

Quoi qu'il en soit, espérons que tout aide d'une certaine manière. Et frapper votre ordinateur portable avec un téléphone ne va pas vraiment aider.

15
CharithJ

Puisque vous indiquez que la réponse de StellarEleven ne vous aide pas, je suppose que vous cherchez quelque chose d'encore plus simple. Ce n’est probablement pas correct à 100%, mais j’ai bien compris comment cela fonctionne:

Le fichier licx est simplement une liste des composants "sous licence" utilisés par votre application.

Chaque ligne du fichier est au format suivant:

[Component Name], [Assembly Name]

Par exemple, l'un de mes projets utilise le composant IP Works NetDial sous licence afin que mon fichier .licx contienne la ligne suivante:

nsoftware.IPWorks.Netdial, nsoftware.IPWorks

Dans le contexte du fichier de projet (.csproj), le fichier .licx est référencé en tant que EmbeddedResource. Au cours du processus de construction, LC.exe vérifie que la machine effectuant la construction dispose des licences appropriées pour le composant en question et génère un fichier binaire .licenses qui est éventuellement incorporé en tant que ressource ([AssemblyName] .exe.licenses) dans l'exécutable final.

Est-ce que cela aide?

28
Richard J Foster

Nous utilisons une politique d’enregistrement personnalisée (TFS) qui supprime explicitement le contenu de cette information si elle est présente dans la liste d’enregistrement.

0
Miki