Pergunta

Eu tenho uma propriedade no MSBUILL para representar o diretório acima do msbuildprojectDirectory:

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

Eu preciso então usar esta propriedade, mas preciso da string de diretório limpa para que não inclua o ... Em outras palavras, eu preciso do .. avaliado, de modo que se o arquivo de projeto atual estiver em C:\Test\Tom\MyDir, então eu preciso de uma propriedade contendo a string C:\Test\Tom.

A razão pela qual estou perguntando é porque estou tentando executar um comando assim:

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

Mas está reclamando do caminho para o 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.

Foi útil?

Solução

Há um Converttoabsolutepath Tarefa, que algum uso?

Outras dicas

O melhor método que tenho agora está abaixo, mas eu queria saber se poderia haver uma maneira melhor ..

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

Se você quiser ter Wildcard avaliado, você deve Use o item em vez de propriedade.

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

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

(Excluí minha resposta, pois não vi que Tom havia respondido exatamente da mesma maneira!)

A propósito, por que você não define o atributo "WorkingDirectory" da tarefa Exec, onde você realmente chama o MSIEXEC para ser a localização do seu MSI - dessa maneira você não terá problemas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top