【发布时间】:2011-07-21 17:16:36
【问题描述】:
我需要确保在其中一个文件发生更改时始终运行对大量文件进行操作的自定义构建工具。
我知道您可以为自定义构建工具指定“附加依赖项”,但有没有比每行指定一个文件更好的方法?
【问题讨论】:
标签: visual-studio dependencies custom-build
我需要确保在其中一个文件发生更改时始终运行对大量文件进行操作的自定义构建工具。
我知道您可以为自定义构建工具指定“附加依赖项”,但有没有比每行指定一个文件更好的方法?
【问题讨论】:
标签: visual-studio dependencies custom-build
一点小技巧:
(1) 将依赖文件分组到一个单独的文件夹中
(2) 创建一个jscript文件detect.js如下:
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) 为 Pre-Build Event 添加命令行如下:
cscript.exe /nologo detect.js $(Output) $(InputFolder)
(3) 设置自定义 Buld Step 以强制 Pre-Build Event 发生,即
Command Line: echo --------------
Outputs: echo.fake
Execute After: PreBuildEvent
【讨论】:
刚刚使构建工具依赖于一个文件。创建了另一个在它之前运行的自定义构建工具,如果任何真正的依赖关系发生了变化,它会触及这个文件。优点是我现在有很大的灵活性,并且如果依赖项发生变化,我不需要更改任何项目设置 - 这是通过新的自定义构建工具访问的数据库来处理的。
【讨论】:
“附加依赖项”是正确且唯一记录的方式。您可以使用外部工具调整项目文件中构建工具的此字段的内容,以省去复制粘贴和错字调整的麻烦。
【讨论】:
它不会那么可靠,但您可以将所有文件放在一个子文件夹中,然后将该文件夹作为依赖项。
【讨论】: