MSBuild Clean Directory Zeichenfolge
-
26-09-2019 - |
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.
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