2

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

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

4

4 に答える 4

2

ConvertToAbsolutePath タスクがありますが、それは使用できますか?

于 2010-08-09T11:28:01.953 に答える
1

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

ちなみに、実際にmsiexecを呼び出すExecタスクの「WorkingDirectory」属性をMSIの場所に設定してみませんか。そうすれば、パスの長さの問題に遭遇することはありません。

于 2010-08-11T09:50:57.037 に答える
1

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

<?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>
于 2010-08-06T15:18:27.647 に答える
1

ワイルドカードを評価したい場合は、Property の代わりにItem を使用する必要があります。

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

<Target Name="ExecMSIExec">
  <Exec Command="msiexec /passive /i %(BuildDir.FullPath)\Vendor\LogParser.msi"/>
</Target>
于 2010-08-07T06:01:06.883 に答える