让msbuild从源文件名生成目标文件名

时间:2012-06-12 13:33:15

标签: visual-studio msbuild msbuild-task

我正在试图弄清楚如何使用MSBuild从一组配置文件中创建一组dll。也就是说,我有一些配置文件

Policy.1.1.mylib.config
Policy.1.2.mylib.config
...
Policy.1.x.mylib.config

并且在msbuild目标中我想用这些文件的列表调用AL(程序集链接器)任务,其中Outputfile参数值(每个Policy.1.i.mylib.dll i = 1, ..., x)动态生成相关的配置文件参数。 (所有其他参数都是我明确知道的,所以我可以直接输入)。

我对MSBuild没有多少经验。我想出了如何在一个文件的后期构建目标中运行AL任务,以及如何将配置文件名列表添加到列表中并且认为我能够使用批处理循环遍历该列表,但是我在从源文件名生成目标文件名时,卡住了。

(注意:这是msbuild 3.5,所以看起来似乎没有字符串操作,因为它似乎在4.0中。另外从网上安装额外的lib也不是我的选择。)

有什么建议吗?也许这样的方法不适合MSBuild,我只是没有看到这样做的正确方法。配置文件是以编程方式生成的,也许我应该只是创建一组要处理的文件,每个文件都包含al的输入和输出名称,并由MSBuild读取这些文件?

2 个答案:

答案 0 :(得分:2)

如果您只想创建一个程序集文件名列表,可以通过批量配置文件名在项目组中创建它们:

<ItemGroup>
    <ConfigFiles Include="Path\to\Policy.*.config" />
    <Assemblies Include="%(ConfigFiles.Filename).dll" />
</ItemGroup>

Assemblies项目组将包含

Policy.1.1.mylib.dll
Policy.1.2.mylib.dll
...
Policy.1.x.mylib.dll

答案 1 :(得分:1)

您可以使用ItemGroup对配置进行分组,这样您就可以访问metadata以进行类似于foreach的循环并重新创建dll名称,例如: <Task Input="%(Configs.FullName)" Output="%(Configs.RelativeDir)\%(Configs.Filename).dll" />