Comment configurer un outil de création personnalisé de Visual Studio pour qu'il dépende d'un grand nombre de fichiers?

StackOverflow https://stackoverflow.com/questions/5412586

Question

Je dois m'assurer qu'un outil de construction personnalisé qui fonctionne sur un grand nombre de fichiers est toujours exécuté lorsqu'un de ces fichiers est modifié.

Je sais que vous pouvez spécifier des "dépendances supplémentaires" pour l'outil de construction personnalisé, mais y a-t-il un meilleur moyen que de spécifier un fichier par ligne?

Était-ce utile?

La solution

"Dépendances supplémentaires" est la méthode correcte et la seule documentée.Vous pouvez ajuster le contenu de ce champ pour l'outil de construction dans le fichier de projet à l'aide d'un outil externe pour économiser sur les problèmes liés au copier-coller et à l'ajustement typographique.

Autres conseils

Je viens de faire dépendre l'outil de construction d'un seul fichier.Création d'un autre outil de construction personnalisé qui s'exécute avant lui et qui touche ce fichier si l'une des dépendances réelles a changé.L'avantage est que j'ai maintenant beaucoup de flexibilité et je n'ai pas besoin de modifier les paramètres du projet si les dépendances changent - cela est pris en charge via une base de données à laquelle le nouvel outil de construction personnalisé accède.

Ce ne sera pas aussi fiable, mais vous pouvez placer tous les fichiers dans un sous-dossier et simplement en faire une dépendance.

Un petit hack:

(1) regroupez les fichiers de dépendance dans un dossier séparé

(2) créer un fichier jscript detect.js comme suit:

var output = WScript.arguments(0);
var folder = WScript.arguments(1);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objOutput = fso.GetFile(output);
var objFolder = fso.GetFolder(folder);
// if the output file is older than input folder,
// delete output file to force regenerate
if (objOutput.DateLastModified < objFolder.DateLastModified) {
    fso.DeleteFile(objOutput);
} else {
    // if the output file is older than one of files in the input folder,
    // delete output file to force regenerate
    var e = new Enumerator(objFolder.Files);
    for (; !e.atEnd(); e.moveNext()) {
        if (objOutput.DateLastModified < e.item().DateLastModified)
            fso.DeleteFile(objOutput);
            break;
        }
    }
}

(2) Ajoutez des lignes de commande à l'événement de pré-construction comme suit:

cscript.exe /nologo detect.js $(Output) $(InputFolder)

(3) Configurez l'étape Buld personnalisée pour forcer l'événement de pré-construction à se produire, c'est-à-dire

Command Line: echo --------------
Outputs: echo.fake
Execute After: PreBuildEvent
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top