2013-02-06 1 views
3

Je veux avoir un fichier "manifest.json" dans mon projet, qui contient une liste de fichiers .cs et .dll dont dépend le projet, mais qui ne font pas partie du projet. Pour compiler ces fichiers également lors de la construction, je dois en quelque sorte dire à Visual Studio d'inclure ces fichiers et assemblages dans le processus de construction.Ajouter des fichiers source et des références d'assemblage sur l'événement de pré-construction

Y a-t-il un moyen de le faire dans l'événement de pré-construction?

+0

pourquoi ne pas mettre ces fichiers dans un autre projet. – giammin

+0

@giammin Parce que dépendant d'un autre projet, cela dépend de l'assemblage qui en résulte. Je veux dépendre directement des fichiers source, qui sont compilés dans mon exécutable. –

+1

pourquoi ne pas inclure ces fichiers dans le projet? – giammin

Répondre

2

J'ai fait une coutume maintenant ITaskItem qui ajoute les fichiers avant le processus de construction.

Voilà comment je l'ai fait:

1) Créez des ITaskItem

public class AddSourceFiles : Task 
{ 
    private ITaskItem[] output = null; 

    [Output] 
    public ITaskItem[] Output 
    { 
     get 
     { 
      return output; 
     } 
    } 

    public override bool Execute() 
    { 
     //gather a list of files to add: 
     List<string> filepaths = new List<string>() { "a.cs", "b.cs", "d.cs" }; 

     //convert the list to a itaskitem array and set it as output 
     output = new ITaskItem[filepaths.Count]; 
     int pos = 0; 
     foreach (string filepath in filepaths) 
     { 
      output[pos++] = new TaskItem(filepath); 
     } 
    } 
} 

2) Création d'un fichier * .targets, par exemple "AddSourceFiles.targets":

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <UsingTask AssemblyFile="AddSourceFiles.dll" TaskName="AddSourceFiles" /> 
    <PropertyGroup> 
     <BuildDependsOn> 
      AddSourceFiles; 
      $(BuildDependsOn); 
     </BuildDependsOn> 
    </PropertyGroup> 
    <Target Name="AddSourceFiles"> 
     <AddSourceFiles> 
      <Output TaskParameter="Output" ItemName="Compile" /> 
     </AddSourceFiles> 
    </Target> 
</Project> 

Comme vous pouvez le voir, la DLL résultante de la classe "AddSourceFiles" est référencée dans le fichier de tâche.

3) La dernière étape consiste à importer ce fichier .targets dans chaque fichier .csproj que vous souhaitez inclure dans votre classe AddSourceFiles.

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    . 
    . 
    <Import Project="c:\path\to\AddSourceFiles.targets" /> 
    . 
    . 
</Project> 

Je suis aussi très nouveau à cela, alors ne hésitez pas à améliorer celui-ci;)

1

vous devez utiliser VisualStudio macros:

http://msdn.microsoft.com/en-us/library/b4c73967(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/8h31zbch.aspx

Les macros IDE contient un exemple qui est similaire à ce que vous essayez d'atteindre:

AddDirAsSlnFolder - Importe un dossier sur le disque dans une structure de dossier de solution.

------ ----- mise à jour

j'ai trouver simplement que Vs2012 a une fonctionnalité macro amovible ....

+0

Où puis-je télécharger l'IDE Macros? Le site Microsoft ne veut pas me le faire savoir:/..il n'y a-t-il aucune possibilité de le faire en utilisant C#? –

+0

Je déteste aussi vb. quand je dois créer des macros, je crée un dll en C# puis je l'appelle avec vb. Pour ouvrir les macros IDE Alt + F11 à partir de visualstudio. Si vous voulez éviter les macros, le modèle d'automation visuelle de studio peut s'adapter à vos besoins. – giammin

+0

J'ai trouvé un moyen de le faire avec un ITaskItem personnalisé, mais je suis toujours intéressé par une solution utilisant des macros ou l'automatisation de studio visuel. Pourriez-vous fournir un exemple très simple de la façon de le faire? –

Questions connexes