MSBuild清除目录字符串
我在MSBuild中有一个属性,表示MSBuildProjectDirectory上方的目录:MSBuild清除目录字符串,msbuild,relative-path,absolute-path,Msbuild,Relative Path,Absolute Path,我在MSBuild中有一个属性,表示MSBuildProjectDirectory上方的目录: <PropertyGroup> <BuildDir>$(MSBuildProjectDirectory)\..</PRSBuildDir> </PropertyGroup> 但是它抱怨msi的路径:这个安装包无法打开。请验证该软件包是否存在以及您是否可以访问它,或者与应用程序供应商联系以验证这是一个有效的Windows Installer软件包
<PropertyGroup>
<BuildDir>$(MSBuildProjectDirectory)\..</PRSBuildDir>
</PropertyGroup>
但是它抱怨msi的路径:这个安装包无法打开。请验证该软件包是否存在以及您是否可以访问它,或者与应用程序供应商联系以验证这是一个有效的Windows Installer软件包。我现在得到的最佳方法如下,但我想知道是否有更好的方法
<?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的位置-这样您就不会遇到路径长度问题是的,这肯定很有用,但请注意,如果您使用..传入绝对路径。。在其中,例如$MSBuildProjectDirectory\..中,任务只会吐出相同的字符串。因此,您必须传入一个相对路径才能对其进行清理。感谢您可以使用a或in调用See的可能副本
<ItemGroup>
<BuildDir Include="$(MSBuildProjectDirectory)\.."/>
</ItemGroup>
<Target Name="ExecMSIExec">
<Exec Command="msiexec /passive /i %(BuildDir.FullPath)\Vendor\LogParser.msi"/>
</Target>