从msbuild中的通配符项组中选择单个项

从msbuild中的通配符项组中选择单个项,msbuild,msbuild-itemgroup,Msbuild,Msbuild Itemgroup,我正在尝试使用ItemGroup在MsBuild文件中创建属性。该属性需要是可执行文件的路径,该可执行文件由numget update命令“还原”。 问题是,我事先不知道文件将在哪里结束(因为nuget更新将获得最新版本),并且可能有多个文件(显然nuget可能忘记删除旧的包文件夹) 到目前为止,我尝试的是: <ItemGroup> <Executable Include="packages\mypackage*\**\myexecutable.exe" /> &

我正在尝试使用
ItemGroup
在MsBuild文件中创建属性。该属性需要是可执行文件的路径,该可执行文件由
numget update
命令“还原”。 问题是,我事先不知道文件将在哪里结束(因为nuget更新将获得最新版本),并且可能有多个文件(显然nuget可能忘记删除旧的包文件夹)

到目前为止,我尝试的是:

<ItemGroup>
    <Executable Include="packages\mypackage*\**\myexecutable.exe" />
</ItemGroup>
显然,
ItemGroup
正在查找并创建一个
-分隔列表。我需要一种方法来排除一切,只保留一个。。。甚至是关于如何通过MsBuild实现所需功能的更好想法(如果可能的话,这并不意味着创建自定义任务或只是编写单独的脚本)


谢谢

我需要一种方法来排除一切,只保留一个。。。哪一个?包裹在你的控制之下吗?我建议在NuGet包中包含一个msbuild文件,该文件将属性设置为可执行文件的路径,该路径在引用NuGet包的所有项目中都可用。然后,单个项目不必添加任何逻辑来查找可执行文件。@stijn确实是个好问题。。。它应该是最新安装的,或者即使是第一次发现也可以。马丁·乌尔里希,你能回答一下吗?我会试试的。我需要一种排除一切并只保留一个的方法。。。哪一个?包裹在你的控制之下吗?我建议在NuGet包中包含一个msbuild文件,该文件将属性设置为可执行文件的路径,该路径在引用NuGet包的所有项目中都可用。然后,单个项目不必添加任何逻辑来查找可执行文件。@stijn确实是个好问题。。。它应该是最新安装的,或者即使是第一次发现也可以。马丁·乌尔里希,你能回答一下吗?我试试看。
<Exec Command="$(Executable) $(MSBuildThisFileDirectory)solutionfile.sln $(MSBuildThisFileDirectory)solutionfile.zip" WorkingDirectory="$(MSBuildThisFileDirectory)" />
packages\mypackage-1.0\myexecutable.exe;packages\mypackage-2.0\myexecutable.exe;