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;)
pourquoi ne pas mettre ces fichiers dans un autre projet. – giammin
@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. –
pourquoi ne pas inclure ces fichiers dans le projet? – giammin