3

Je suis intéressé par un peu de génération de code en fonction de certains fichiers présents dans le fichier .csproj. Quelles méthodes d'extensibilité sont disponibles pour que je puisse générer un fichier .cs qui serait compilé avec mon projet?Génération de code Visual Studio, contenu de projet

Mise en garde: J'ai immédiatement pensé à utiliser des modèles T4 pour cette tâche. Cependant, cette solution doit être supportable sur Visual Studio C# Express. Je crois que la version express ne supporte pas les templates T4

+0

(a répondu au commentaire) –

Répondre

4

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

+0

est-ce que C# exprime le support avant/après les étapes de construction? –

+0

Je viens de vérifier, et il semble; Propriétés -> Événements de construction> Pré-construction/Post-construction. Bien sûr, alors vous devez tout faire via un lot externe/exe –

+0

Merci pour cette chose d'écho. Peut-être utile - je dois me souvenir. –

2

Vous pouvez ouvrir le fichier csproj (c'est juste un script msbuild) et ajouter des cibles personnalisées.

Il existe deux cibles par défaut que vous pouvez remplacer à cette fin, BeforeBuild et AfterBuild (peut-être plus mais je ne suis pas sûr des autres). Vous pouvez également inclure des DLL personnalisées avec les nouvelles tâches msbuild, bien que cela génère un avertissement de sécurité lors de l'ouverture du projet, sauf si vous ajoutez la DLL à la liste SafeImports de MSbuild (HKLM \ Software \ Microsoft \ Visual Studio \ 9.0 \ MSBuild \ SafeImports), 8.0 si vous utilisez VS2005.

Questions connexes