質問

MSBuildProjectDirectoryの上のディレクトリを表すために、MSBuildにプロパティがあります。

<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タスク, 、それは何でもしますか?

他のヒント

私が今持っている最良の方法は以下ですが、私はより良い方法があるのではないかと思っていました。

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

(トムがまったく同じように答えたことがわからなかったので、私の答えを削除しました!)

ちなみに、実際にmsiexecをMSIの位置と呼ぶエグゼクティブタスクの「WorkingDirectory」属性を設定してみませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top