Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MSBuild项目文件运行NuGet包可执行文件的当前版本?_Msbuild_Path_Nuget - Fatal编程技术网

如何从MSBuild项目文件运行NuGet包可执行文件的当前版本?

如何从MSBuild项目文件运行NuGet包可执行文件的当前版本?,msbuild,path,nuget,Msbuild,Path,Nuget,我已将包添加到解决方案中。当前版本为1.9.1,因此我在MSBuild项目文件中硬编码了可执行文件的路径: <StartAction>Program</StartAction> <StartProgram>$(MSBuildProjectDirectory)\..\..\Packages\xunit.runners.1.9.1\tools\xunit.gui.clr4.exe</StartProgram> <StartArguments>

我已将包添加到解决方案中。当前版本为1.9.1,因此我在MSBuild项目文件中硬编码了可执行文件的路径:

<StartAction>Program</StartAction>
<StartProgram>$(MSBuildProjectDirectory)\..\..\Packages\xunit.runners.1.9.1\tools\xunit.gui.clr4.exe</StartProgram>
<StartArguments>"$(MSBuildProjectDirectory)\$(OutPutPath)$(AssemblyName).dll"</StartArguments>

将为我提供
@(runners)
中的所有跑步者,按版本排序。如何获取其中一个,最好是最后一个?

对于筛选,您可以构建自定义任务。它甚至可以是内联的,如果你可以编写循环项目并选择正确的项目所需的c代码。然后可以在输出属性中公开所选路径,然后使用该属性设置StartProgram属性的值

显示一个自定义内联任务,该任务获取一个项数组并使用它进行填充。你可以从那里开始

您需要在启动调试的目标之前运行的目标中使用此任务。

对于的,我以以下内容结束:

<PropertyGroup>
  <Package>$([System.IO.Directory]::GetDirectories("$(MSBuildProjectDirectory)\\..\\..\\Packages\\", "xunit.runners.*").GetValue(0))</Package>
  <StartAction>Program</StartAction>
  <StartProgram>$(Package)\tools\xunit.gui.clr4.exe</StartProgram>
  <StartArguments>"$(MSBuildProjectDirectory)\$(OutPutPath)$(AssemblyName).dll"</StartArguments>
</PropertyGroup>

$([System.IO.Directory]::GetDirectory($(MSBuildProjectDirectory)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
节目
$(包)\tools\xunit.gui.clr4.exe
“$(MSBuildProjectDirectory)\$(OutPutPath)$(AssemblyName.dll”

显然,NuGet将保证只有一个版本的包。

看起来不像VS实际运行目标,并按照属性组中的指定选择属性值。问题是首先评估属性,然后评估项目。事实上,它在目标中非常有效(很酷的概念,内联自定义任务,谢谢!),但自定义任务不能用于评估阶段。您可以尝试使用自定义属性函数。但它需要显式启用,并且您不能在AFAIK中内联执行。的可能副本
<PropertyGroup>
  <Package>$([System.IO.Directory]::GetDirectories("$(MSBuildProjectDirectory)\\..\\..\\Packages\\", "xunit.runners.*").GetValue(0))</Package>
  <StartAction>Program</StartAction>
  <StartProgram>$(Package)\tools\xunit.gui.clr4.exe</StartProgram>
  <StartArguments>"$(MSBuildProjectDirectory)\$(OutPutPath)$(AssemblyName).dll"</StartArguments>
</PropertyGroup>