String della directory pulita MSBuild
-
26-09-2019 - |
Domanda
Ho una proprietà in MSBuild per rappresentare la directory sopra la MSBuildProjectDirectory:
<PropertyGroup>
<BuildDir>$(MSBuildProjectDirectory)\..</PRSBuildDir>
</PropertyGroup>
Devo quindi usare questa proprietà, ma ho bisogno della stringa di directory pulita in modo che non includa il ..
. In altre parole, ho bisogno del ..
valutato, in modo che se il file di progetto corrente è in C:\Test\Tom\MyDir
, quindi ho bisogno di una proprietà contenente la stringa C:\Test\Tom
.
Il motivo per cui mi chiedo è perché sto cercando di eseguire un comando come questo:
msiexec /passive /i "D:\Build\2.3.84.40394\Deployment\..\Vendor\LogParser.msi"
Ma si lamenta del percorso per l'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.
Soluzione
C'è un ConvertToAbSolutePath Task, questo utilizzo?
Altri suggerimenti
Il metodo migliore che ho in questo momento è di seguito, ma mi chiedevo se potesse esserci un modo migliore ..
<?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>
Se vuoi avere Caradario valutato, dovresti Usa l'oggetto invece di proprietà.
<ItemGroup>
<BuildDir Include="$(MSBuildProjectDirectory)\.."/>
</ItemGroup>
<Target Name="ExecMSIExec">
<Exec Command="msiexec /passive /i %(BuildDir.FullPath)\Vendor\LogParser.msi"/>
</Target>
(Eliminato la mia risposta perché non ho visto che Tom aveva risposto esattamente allo stesso modo!)
A proposito, perché non si imposta l'attributo "WorkingDirectory" dell'attività EXEC in cui si chiama effettivamente MSIEXEC come posizione del tuo MSI - in questo modo non ti imbatterai in un percorso.