Pregunta

Tengo una propiedad en msbuild para representar el directorio por encima del msbuildprojectDirectory:

<PropertyGroup>
    <BuildDir>$(MSBuildProjectDirectory)\..</PRSBuildDir>
</PropertyGroup>

Necesito usar esta propiedad, pero necesito la cadena de directorio limpia para que no incluya el ... En otras palabras necesito el .. evaluado, de modo que si el archivo de proyecto actual está en C:\Test\Tom\MyDir, entonces necesito una propiedad que contenga la cadena C:\Test\Tom.

La razón por la que pregunto es porque estoy tratando de ejecutar un comando como este:

msiexec /passive /i "D:\Build\2.3.84.40394\Deployment\..\Vendor\LogParser.msi"

Pero se queja del camino hacia el 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.

¿Fue útil?

Solución

Hay una Tarea ConvertToabsolutePath, ese uso?

Otros consejos

El mejor método que tengo en este momento está a continuación, pero me preguntaba si podría haber una mejor manera ...

<?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>

Si quieres tener comodín evaluado, debería utilizar artículo en lugar de propiedad.

<ItemGroup>
  <BuildDir Include="$(MSBuildProjectDirectory)\.."/>
</ItemGroup>

<Target Name="ExecMSIExec">
  <Exec Command="msiexec /passive /i %(BuildDir.FullPath)\Vendor\LogParser.msi"/>
</Target>

(Eliminé mi respuesta como no vi que Tom había respondido exactamente de la misma manera!)

Por cierto, ¿por qué no configura el atributo "WorkingDirectory" de la tarea exec donde realmente llamas a MSIEXEC es la ubicación de tu MSI? De esa manera, no te encontrarás con problemas de longitud de ruta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top