我重写了我们 NAnt 建立脚本以使他们更清洁和更简单、以及更一般的目的。

其中一个步骤,在我们的生成过程是包某些文件转换为一个压缩文件。之前我们已经创建了一个 fileset 有很多的包括文件的类型,试图抓住一切可能的项目。这种偶尔造成的问题时,我们想要包括非标准的文件类型与该项目。

我希望我能找到一种方式来创建一个 fileset 根据文件(而且,还有, 文件)列出在Visual Studio项目文件(.csproj).然后我可以使用这个文件集中的一个 zip 任务。我还没有找到任何东西,这不会自动(虽然现在废弃的 SLiNgshoT 任务 NAntContrib 看起来有点有希望的).

我开始的道路上想到做这手动,但是已经得到了坚持。我有一个目标,获得的项目从溶液(使用 regex),然后试图获得每个文件的内容项目中的使用 xmlpeek (with XPath查询 /n:Project/n:ItemGroup/n:Content/@Include).这里的问题是 xmlpeek 不返回每个值的,只是第一次。而且,即使它没有返回每值,我不知道我怎么会让它进入一个 fileset 从这里。

是否有任何方法来挽救这个轨道的思想?我可以完成我想要什么一个自定义NAnt任务(我不喜欢有每个项目都依赖于一个自定义的任务)?有一些内置的方式来做到这一点,我找不到?

请随便问问题的意见,如果一些关于我的目标或方法不清楚。

谢谢!


更新: 为了澄清,我的观点在所有这一切都是为了使整个过程更加顺畅。同时,我可以很容易地加。xml文件包,这常常得到。xml文件,生活在同一个文件夹不是真的项目的一部分。当我已经有一个列表的文件,该项目使用(分离出来的内容之间的和其他类型,甚至),这似乎是一个耻辱不使用这些信息。最终,没有人应该接触建立的文件来改变包括在一个包。它似乎并不喜欢太多的梦想,我...

有帮助吗?

解决方案

请参阅此相关的问题。该microsoft.build.buildengine接口应该让你得到你所需要的信息更好的访问,但不幸的是,我认为你必须建立一个自定义的任务。

但我认为解析项目文件生成用于别处......有点吃不消把所有的构建脚本内的文件集。而且因为你似乎想重新使用这个,我不认为这取决于自定义任务比再利用(即使你能做到这一切在现有南特任务的任何其他形式的任何糟糕的是,你会仍然需要有每一个项目继承过程中以某种方式)。

其他提示

尽阅读的项目文件。我已经做这样的事情。我只是写一个程序,阅读的项目文件和建造一个定制的项目由项目建立的文件。

然而我试图汇编的我的代码。看起来你正在尝试只是压缩。

考虑到拉链任务会让你跑的多个文件集为它可以创建一些通用的文件集,然后就更新你的特定的人而容易。

所以你可以像这样的东西:

<fileset id="project.source.objects">
  <include name="**/*.cs"/>
  <include name="**/*.xml"/>
  <include name="**/*.resx"/>
</fileset>

<fileset id="project.misc.sources">
  <include name="MyFile1.someext"/>
</fileset>

然后在你的拉链的目标只是说:

<zip zipfile="myzip.zip">
  <fileset refid="project.source.objects"/>
  <fileset refid="project.misc.sources"/>
</zip>

现在,如果你想要的项目的细节。有一件事你能做。如果您使用的是VS2005或更大的搜索T4。这是一个模板框架,用于创建的插件,允许你有额外的文件中产生的,当你做些什么。有点像当你做一类图或有一个文件(而且,它得到它的代码隐藏文件,它是这样做的方式)。

在大多数项目中,我曾在我们维持一个生成文件中对每一个项目,只是把它最新的。由于我们的一般文件集,这是一个开始,所以我们才真正需要更新的文件用于掩盖的东西。

希望这有所帮助。如果你能提供更详细一点我可能可以帮助进一步。

我喜欢Josh的想法的第一部分。

写一个小控制台应用从.csproj的拉文件(因为它在那里只是XML)和写入列表输出到文件中。

而不是恶性的拉链的任务,我会使用 7-ZIP 来创建与存档列表你在上一步中产生的:

(我在这里创建自解压缩档)

<target name="ZipBuild">
  <exec program="${SevenZip}" workingdir="${SolutionPath}/Installation/Build.Staging">
    <arg value="a" />
    <arg value="-sfx" />
    <arg value="ReferenceBuild-${build.number}.exe" />
    <arg value="@mycustomfilelist.txt" />
  </exec>
</target>

希望帮助,

-Jason

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top