Frage

Ich habe eine Eigenschaft in MSBUILD, um das Verzeichnis über dem MSBuildProjectDirectory darzustellen:

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

Ich muss diese Eigenschaft dann verwenden, aber ich brauche die Verzeichniszeichenfolge, die gereinigt wird, damit sie nicht die enthalten ... Mit anderen Worten, ich brauche das .. ausgewertet, so dass, wenn die aktuelle Projektdatei in ist C:\Test\Tom\MyDir, Dann brauche ich eine Eigenschaft, die die Zeichenfolge enthält C:\Test\Tom.

Der Grund, warum ich frage, ist, dass ich versuche, einen Befehl wie diesen auszuführen:

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

Aber es beschwert sich über den Weg zum 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.

War es hilfreich?

Lösung

Da ist ein Converttoabsolutepath -Aufgabe, das irgendwelche Gebrauch?

Andere Tipps

Die beste Methode, die ich gerade habe, ist unten, aber ich habe mich gefragt, ob es einen besseren Weg gibt.

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

Wenn Sie haben wollen Wildcard bewertet, Du solltest Gegenstand benutzen anstelle von Eigentum.

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

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

(Ich habe meine Antwort gelöscht, als ich nicht sah, dass Tom genauso geantwortet hatte!)

Warum setzen Sie übrigens nicht das Attribut "WorkingDirectory" der EXEC -Aufgabe fest, in dem Sie MSiexec tatsächlich als Standort Ihres MSI anrufen - auf diese Weise werden Sie nicht auf Probleme mit der Pfadlänge stoßen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top