2009-07-01 8 views
4

J'ai un service de langage que j'ai construit pour un type de fichier personnalisé.Comment associer une action de génération par défaut personnalisée à un type de fichier personnalisé dans Visual Studio?

En outre, j'ai créé une cible personnalisée (action de construction) dans mes fichiers de projet MSBuild. Je suis cependant incapable de trouver un moyen d'associer cette action de construction par défaut à mon extension de fichier personnalisée. Par exemple, si vous ajoutez un fichier .cs, l'action de construction par défaut est de "compiler". Je voudrais faire la même chose pour le mien. En ajoutant un fichier .dsl, je voudrais que l'action de construction soit "Générer", ce qui est ma cible personnalisée (et donc l'action de construction).

Existe-t-il un moyen sans utiliser un assistant d'élément?

Répondre

6

Je pense que ce qui suit pourrait vous aider, vous et d'autres personnes qui veulent faire des choses similaires.

Si votre objectif final est de générer du code/quelque chose quand quelque chose change dans votre fichier .dsl, alors je suggère que vous pouvez utiliser "CustomTool". C'est une propriété sur n'importe quel élément de projet. Vous écrivez du code pour générer du code, enregistrez l'assembly Generator, puis définissez la propriété customtool du fichier .dsl sur "MyDslToCsGenerator".

Pour enregistrer l'outil personnalisé dans VS vous devez exécuter « regasm » utilitaire, disponible avec framework .Net contre le MyDslToCsGenerator.dll


Je sais que vous avez dit que vous ne voulez pas utilisez l'assistant de modèle d'objet, mais si vous avez accès au modèle de fichier personnalisé, vous pouvez définir l'action de construction par défaut (voir 1er lien ci-dessous)

<ProjectItem SubType="" TargetFileName="$fileinputname$.dsl" 
ReplaceParameters="true" ItemType="Embedded Resource" 
CustomTool="MyDslToCsGenerator">MyFile.dsl</ProjectItem> 

vous pouvez aussi le faire programm matiquement avec DTE (projectItem.Properties.Item("ItemType").Value = "MyOwnBuildActionChoice") comme expliqué dans le 2ème lien ci-dessous

Liens utiles:

  1. How to set the Build Action for an item created by a Visual Studio item template?
  2. Using DTE to set a custom build action
+0

Vin, le premier lien que vous avez mis en place est exactement ce que je cherchais. Je ne sais pas comment j'ai manqué pendant mes recherches. Très apprécié! –

0

Je ne suis pas sûr de "Générer", ce que je suppose être votre 'action de construction personnalisée' - Mais, j'ai pu définir toute action de construction par programmation en utilisant l'API du moteur de construction, dans une tâche de construction. Donc, supposons que le fichier ait une action de compilation configurée sur 'compiler', vous pouvez facilement le modifier comme vous voulez pendant l'exécution (temps de compilation). Dans mon cas, je l'ai défini sur 'Embedded Resource'. Ceci est possible en associant un fichier de cibles personnalisées, qui exécute le code de tâche de construction que vous pourriez écrire. Faites-moi savoir si ce n'est pas clair, je peux expliquer plus loin, si vous êtes intéressé.

+0

Salut Vin, j'ai une cible personnalisée, et je peux manuellement Définissez la tâche de construction sur cette cible (qui est l'action de construction). C'est juste quand j'ajoute un nouveau fichier .dsl, je voudrais qu'il associe automatiquement cette action de construction au fichier. –

Questions connexes