Sur C# Express, la réponse est simple: aucune.
C# Express ne prend pas en charge les extensions. Les gens ont déjà essayé et ça a été moche. Avocats, mess, tout. Le célèbre exemple est TestDriven.NET. Si cela ne vous dérange pas de construire à la ligne de commande, vous pouvez utiliser une tâche personnalisée msbuild ou une commande de pré-construction/post-construction.
Dans VS2005/VS2008 ("correct"), un "outil personnalisé" est le l'une des façons de faire; cela implique d'écrire un Package
; I've done this recently, et the code est ouvert pour inspection.
T4 est une autre option pour l'avenir. Cela ne correspondait pas à mes besoins, mais cela pourrait faire le vôtre.
Comme une vérification rapide des événements de construction, je l'ai ajouté (dans un projet express) de pré-construction et les événements post-construction (Propriétés du projet -> Créer des événements) de:
echo $(TargetPath)
et
echo $(SolutionDir)
respectivement
; a frappé construire, et la sortie est maintenant:
------ Build started: Project: ConsoleApplication10, Configuration: Release Any CPU ------
echo D:\SomePath\ConsoleApplication10.exe
D:\SomePath\ConsoleApplication10.exe
c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /unsafe+ /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:TRACE /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\ConsoleApplication10.exe /target:exe Form1.cs Form1.Designer.cs Form2.cs Form2.Designer.cs Program.cs Properties\AssemblyInfo.cs
Compile complete -- 0 errors, 0 warnings
ConsoleApplication10 -> D:\SomePath\ConsoleApplication10.exe
echo D:\SomePath
D:\SomePath
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
Il semble fonctionner correctement (à savoir ont été exécutés les deux événements). Pas élégant, mais réalisable. Les macros devraient vous permettre (avec une pokery) d'accéder aux éléments du projet, par exemple $(ProjectPath)SomeFile.xml
(a répondu au commentaire) –