MSBUILD CLEAT CHARAL DIRALAL
-
26-09-2019 - |
Вопрос
У меня есть недвижимость в MSBuild, чтобы представлять каталог над MSBUILDPROECTDirectory:
<PropertyGroup>
<BuildDir>$(MSBuildProjectDirectory)\..</PRSBuildDir>
</PropertyGroup>
Мне нужно затем использовать это свойство, но мне нужна строка каталога, очищенная так, чтобы она не включала ..
. Отказ Другими словами, мне нужно ..
оценивается, так что если текущий файл проекта находится в C:\Test\Tom\MyDir
, тогда мне нужна собственность, содержащая строку C:\Test\Tom
.
Причина, по которой я спрашиваю, это потому, что я пытаюсь запустить команду, как это:
msiexec /passive /i "D:\Build\2.3.84.40394\Deployment\..\Vendor\LogParser.msi"
Но это жаловаться на путь к 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.
Решение
Есть ConvertToabsolutepath Task, что любое использование?
Другие советы
Лучший метод, который я получил прямо сейчас, но мне было интересно, может ли быть лучшим способом ..
<?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>
Если вы хотите иметь Подстановочный знак оценивается, вам следует использовать товар вместо свойства.
<ItemGroup>
<BuildDir Include="$(MSBuildProjectDirectory)\.."/>
</ItemGroup>
<Target Name="ExecMSIExec">
<Exec Command="msiexec /passive /i %(BuildDir.FullPath)\Vendor\LogParser.msi"/>
</Target>
(Удалил мой ответ, так как я не видел, что Том ответил точно так же!)
Кстати, почему бы вам не установить атрибуту «WorkingDirectory» задачи EXEC, где вы фактически звоните MSIIEXEC, чтобы стать местоположением вашего MSI - таким образом, вы не будете запускать проблемы длины пути