Dans MSBuild, puis-je utiliser la Chaîne de caractères.Remplacer la fonction sur un élément de méta-données?
Dans MSBuild v4 on peut utiliser des fonctions (comme string.replace
) sur Propriétés. Mais comment puis-je utiliser les fonctions sur Métadonnées?
Je voudrais utiliser le string.replace
fonction comme ci-dessous:
<Target Name="Build">
<Message Text="@(Files->'%(Filename).Replace(".config","")')" />
</Target>
Malheureusement, ce sorties (pas tout à fait ce que je visais):
log4net.Replace(".config","");ajaxPro.Replace(".config","");appSettings.Replace(".config","");cachingConfiguration20.Replace(".config","");cmsSiteConfiguration.Replace(".config","");dataProductsGraphConfiguration.Replace(".config","");ajaxPro.Replace(".config","");appSettings.Replace(".config","");cachingConfiguration20.Replace(".config","");cmsSiteConfiguratio
Toutes les pensées?
- De quoi êtes-vous en train d'essayer d'accomplir? Est-ce résultat final souhaité supprimer l'extension à partir des éléments contenus dans un élément du groupe? Vous pourriez aborder cette que de créer un nouveau groupe d'éléments de l'élément d'origine du groupe de modifier les entrées. Une transformation ou une tâche personnalisée si plus de contrôle est requis pourrait le faire.
- Salut. Avez-vous résoudre ce problème à la fin? Comment? J'ai un problème similaire: définition de propriété ne fonctionne pas tant que la Cible a une liste de fichiers en Entrée, pas un seul nom de fichier.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire avec un peu de ruse:
Fondamentalement, nous appelons la méthode statique "Copy" pour créer une nouvelle chaîne (pour quelque raison il ne l'aime pas si vous essayez de
$('%(Filename)'.Replace('.config',''))
), puis d'appeler la fonction replace sur la chaîne.Le texte intégral devrait ressembler à ceci:
Edit: MSBuild 12.0 semble avoir brisé la méthode ci-dessus. Comme alternative, nous pouvons ajouter une nouvelle entrée de métadonnées pour tous les
Files
éléments. Nous effectuons le remplacer lors de la définition de l'élément de méta-données, nous pouvons accéder à la valeur modifiée comme n'importe quel autre élément de méta-données.par exemple
Résultat:
$([MSBuild]::ValueOrDefault('%(MetadataName)', '').Replace('foo', 'bar'))
au lieu de String.La copie, afin d'éviter la création d'une copie de la chaîne de données.J'avais besoin de faire quelque chose de similaire, la suite travaillé pour moi.
Ces fonctions œuvres dans les propriétés (que je sache). Afin de créer cible qui va effectuer l'opération jeter dosage:
Avez-vous vraiment besoin dans votre exemple de ce genre de tâche? Je veux dire qu'il existe MSBuild Bien connu de l'Élément de Métadonnées
EDIT: je dois préciser que cette tâche processus tous les éléments dans @(Fichiers).
Pour MSBuild 12.0, voici une alternative.
Eu le même problème (sauf avec MakeRelative), donc je passe à une autre solution : Utiliser la bonne vieille méthode CreateItem que prendre une corde et de se transformer en Élément 🙂
je ne pense pas que vous pouvez utiliser directement les fonctions avec itemgroups et les métadonnées (qui serait facile)
Cependant, vous pouvez utiliser le traitement par lots:
Prendre les idées de ce post:
la matrice d'itération
J'ai essayé de couper un itemgroup à envoyer à un outil de ligne de commande (j'ai besoin de perdre .serveur hors tension le nom de fichier)