MSBUILD干净目录字符串
-
26-09-2019 - |
题
我在MSBuild中有一个属性,可以表示MSBuildProjectDirectory上方的目录:
<PropertyGroup>
<BuildDir>$(MSBuildProjectDirectory)\..</PRSBuildDir>
</PropertyGroup>
然后我需要使用此属性,但是我需要清洁目录字符串,以便不包括 ..
. 。换句话说,我需要 ..
评估,以便如果当前项目文件在 C:\Test\Tom\MyDir
, ,然后我需要一个包含字符串的属性 C:\Test\Tom
.
我要问的原因是因为我试图运行这样的命令:
msiexec /passive /i "D:\Build\2.3.84.40394\Deployment\..\Vendor\LogParser.msi"
但这是在抱怨通往MSI的道路: This installation package could not be opened. Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package.
解决方案
有个 转换为左右任务, ,有什么用吗?
其他提示
我现在得到的最好的方法在下面,但是我想知道是否有更好的方法。
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildDir>$(MSBuildProjectDirectory)\..</BuildDir>
</PropertyGroup>
<Target Name="Test">
<ItemGroup>
<CleanBuildDir Include="$(BuildDir)" />
</ItemGroup>
<PropertyGroup>
<BuildDir>%(CleanBuildDir.FullPath)</BuildDir>
</PropertyGroup>
<Message Text="$(BuildDir)" />
</Target>
</Project>
如果你想拥有 通配符评估, , 你应该 使用项目 而不是财产。
<ItemGroup>
<BuildDir Include="$(MSBuildProjectDirectory)\.."/>
</ItemGroup>
<Target Name="ExecMSIExec">
<Exec Command="msiexec /passive /i %(BuildDir.FullPath)\Vendor\LogParser.msi"/>
</Target>
(删除了我的答案,因为我没有看到汤姆以完全相同的方式回答!)
顺便说一句,为什么不设置EXEC任务的“ WorkingDirectory”属性,您实际上将MSIEXEC称为MSI的位置 - 这样您就不会遇到路径长度问题
不隶属于 StackOverflow