如何使用msbuild命令(或之前)查找文件是否存在

如何使用msbuild命令(或之前)查找文件是否存在,msbuild,msdeploy,Msbuild,Msdeploy,我需要在运行powershell脚本之前找到是否存在某些文件 文件(如果存在)将位于特定文件夹中 我可以通过proj文件或类似文件检查它的存在吗?注意,第二个MyCheck查看(第一个)MyCheck的(条件)值 真的 假的 或 假的 真的 为了执行PS脚本,根据文件的存在,您可以在*.proj文件中创建一个Target元素,条件取决于文件的存在: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

我需要在运行powershell脚本之前找到是否存在某些文件

文件(如果存在)将位于特定文件夹中


我可以通过
proj
文件或类似文件检查它的存在吗?

注意,第二个MyCheck查看(第一个)MyCheck的(条件)值


真的
假的


假的
真的

为了执行PS脚本,根据文件的存在,您可以在*.proj文件中创建一个
Target
元素,条件取决于文件的存在:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <ScriptLocation>.\Do-Something.ps1</ScriptLocation>
    <PowerShellExe Condition=" '$(PowerShellExe)'=='' ">%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe
    </PowerShellExe>
  </PropertyGroup>
  <Target Name="RunPSScript" Condition="Exists($(ScriptLocation))">
    <Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command &quot;$(ScriptLocation)&quot;"/>  
  </Target>
</Project>

做点什么。ps1
%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe

请参阅有关从msbuild项目执行PS脚本的更多详细信息。您可以使用AfterTargets、BeforeTargers或控制此目标的执行顺序。

略短:无条件将MyCheck设置为False,但将该行上移,使其位于条件赋值之前。或者更简短:直接将Exists的结果分配给属性,您只需要一行。我将使用第一个建议(对我的帖子进行了编辑),但第二个建议是空字符串vs true。您是对的,我的错误:
Exists
仅在条件下有效。例如,您可以使用
$([System.IO.File]::Exists(“$(MyFile)”)
,但这仅适用于文件,不适用于文件夹,语法更难记住
    <PropertyGroup>
        <MyCheck>false</MyCheck>
        <MyCheck Condition="Exists($(MyFileOrFolderName))">true</MyCheck>
    </PropertyGroup>  
    <Message Text="MyFileOrFolderNameexists? :  $(MyCheck)" />
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <ScriptLocation>.\Do-Something.ps1</ScriptLocation>
    <PowerShellExe Condition=" '$(PowerShellExe)'=='' ">%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe
    </PowerShellExe>
  </PropertyGroup>
  <Target Name="RunPSScript" Condition="Exists($(ScriptLocation))">
    <Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command &quot;$(ScriptLocation)&quot;"/>  
  </Target>
</Project>