规范化 MSBuild 中的项目列表
我正在尝试获取项目根目录下所有单元测试程序集的列表。 我可以按如下方式执行此操作:
<CreateItem Include="**\bin\**\*.UnitTest.*.dll">
<Output TaskParameter="Include" ItemName="Items"/>
</CreateItem>
但是,这会多次找到相同的 DLL,因为它们存在于多个子目录中。 有没有一种简单的方法可以让我根据项目元数据(即文件名和扩展名)进行规范化,以便获得唯一的单元测试 DLL 列表? 或者我必须求助于编写自己的任务吗?
I am trying to get a list of all unit test assemblies under the root of my project. I can do this as follows:
<CreateItem Include="**\bin\**\*.UnitTest.*.dll">
<Output TaskParameter="Include" ItemName="Items"/>
</CreateItem>
However, this will find the same DLLs multiple times since they exist in multiple sub-directories. Is there an easy way for me to normalize based on item metadata (ie. the file name and extension) so that I get a list of unique unit test DLLs? Or do I have to resort to writing my own task?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尽管这已经很旧了,但我自己永远无法让 Thomas 解决方案发挥作用,但我确实找到了一种仅使用 msbuild v4.0 内置命令的解决方法:
文档: 项目功能
Even though this is old, I could never get Thomas solution to work myself, but I did find sort of a workaround using only built-in commands with v4.0 of msbuild:
Documentation: Item Functions
MSBuild Extension Pack 包含任务 MSBuildHelper,支持命令 删除重复文件。
The MSBuild Extension Pack contains the task MSBuildHelper, supporting the command RemoveDuplicateFiles.
我在网上进行了很好的搜索,但找不到任何方法可以做到这一点。 如果有人知道干净的内置方式,请告诉我。 与此同时,我编写了一个简单的任务来完成这项工作。 用法如下:
执行上述任务后,
MyNormalizedItems
将仅包含ItemsToNormalize
中具有唯一Filename
值的项目元数据。 如果两个或多个项目的Filename
元数据具有相同的值,则第一个匹配项将包含在输出中。MSBuild 任务的代码是:
I had a good search online and couldn't find any way of doing this. If anyone knows a clean built-in way then please let me know. In the meantime, I wrote a simple task to do the job. The usage looks like this:
After the above task has executed,
MyNormalizedItems
will contain only those items fromItemsToNormalize
that have a unique value for theFilename
metadata. If two or more items have the same value for theirFilename
metadata, the first match will be included in the output.The code for the MSBuild task is: