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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top