1

Visual Studio 2008 とビルド後のイベントについて 2 つの質問があります。

1) ビルド後のイベントによって呼び出される msbuild.exe のフル パスを動的に一覧表示するにはどうすればよいですか? 現在、私は次のものを持っています(これは美しく機能します):-

C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe 
    "$(ProjectDir)MSBuild\MSBuildSettings.xml"

..しかし、それはx64ビット環境を持っている場合にのみ機能します。組み込みのマジック設定を使用する方法はありますか? 例えば。$(MsBuildPath)msbuild.exe "blah....xml"??

2) 私の msbuild タスクはいくつかのことを行い、出力として txt ファイルを生成します。msbuild xml ファイルで出力パスをそのように定義します。

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
    <UsingTask TaskName="CustomTask" AssemblyFile="MyAssembly.dll"/>
    <Target>
        <CustomTask
           ...
           OutputFile="Foo.txt"
        />
    <Target>
</Project>

実際の出力フォルダーを msbuild ファイルに渡すにはどうすればよいですか? 私は試した...

OutputFile="$(OutDir)Foo.txt"

しかし、それは失敗しました:(

乾杯!

更新 #1 - 2 番目の質問への回答..

私は 2 番目の質問に答える方法を見つけました。

XML ファイルの変更 :: 外部引数が msbuild.exe 実行可能ファイルに渡されなかった場合に、内部変数名を設定するプロパティ グループを追加します。

    <PropertyGroup>
        <OutputFile Condition=" '$(OutputFile)'=='' ">
            ..\SomeFolder\Foo.txt</OutputFile>
    </PropertyGroup>

    <Target>
        <CustomTask
           ...
           OutputFile="$(OutputFile)"
        />
    <Target>
</Project>

今、msbuild実行可能ファイルを次のように呼び出します...

msbuild.exe "C:\Temp Foo\Blah\MsbuildSettings" /p:OutputFile="C:\Folder 1\Folder 2\blah\"

そしてそれはうまくいきます:)

4

2 に答える 2

5

質問 1 では、プロパティMSBuildBinPathを使用します。

質問 2 では、プロパティOutputPathを使用します(C# または VB プロジェクト)

OutputFile="$(OutputPath)Foo.txt"
于 2009-07-06T04:12:51.213 に答える
0

カスタム タスクをvbproj ( ac# プロジェクトの場合は csproj ) ファイル内に配置し、ビルド後のイベントで VS 定義の MSBuild 変数を使用することができます私は頭の上からこのプロセスを考えているので、これについては我慢してください、笑。

  1. Visual Studio で、ビルド後のイベントに使用するプロジェクトをアンロードし、アンロードされたプロジェクト ノードを右クリックして [編集...] を選択します。
  2. あなたが持っているものと同じように、 UsingTaskを一番上に置きます。
  3. プロジェクトを再読み込みし、プロジェクトのプロパティを開き、そこでビルド後のイベントを編集します。
  4. これで、これらすべての気の利いた変数にアクセスして、カスタム タスクに追加できるはずです。

プロジェクト ファイルは、それ自体が MSBuild スクリプトであり、あらゆる種類の気の利いた MSBuild スクリプト トリックを実行できます。

編集: 申し訳ありませんが、あなたが尋ねた最初の質問に対する答えがありません。

于 2009-07-06T03:58:55.063 に答える