Вопрос

У меня есть недвижимость в 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 - таким образом, вы не будете запускать проблемы длины пути

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top