2012-06-12 64 views
1

我想弄清楚如何使用MSBuild从一组配置文件创建一组dll。也就是说,我有一些配置文件让msbuild从源文件名生成目标文件名

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任务,以及如何获取配置文件名列表到列表中,并确实认为我能够使用批处理循环该列表,但是,当从源文件名生成目标文件名时,m卡住了。

(注:这是的MSBuild 3.5,所以看似没有字符串操作,因为它似乎是在4.0还从网上安装额外的库是不是我的选择。)

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

回答

1

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

+0

谢谢,我可以访问我的任务中的%(Config.Filename)。 '全名'不起作用,但是,我用“%(Configs.identity)”来代替,这是我偶然发现的一个表达。我搜索了很长时间这样的事情,有没有一个参考的地方哪些属性(如“.Filename”)可用于这种listitem? – Thomas

+0

是的,答案中的元数据链接是一个众所周知的项目元数据属性列表。 –

+0

哎。谢谢。愚蠢的我。 – Thomas

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 
相关问题