两个Visual Studio Post-build事件问题和MSBuild

Pur*_*ome 1 msbuild post-build-event visual-studio-2008

我有两个问题:visual studio 2008和post-build events.

1)如何动态列出msbuild.exe完整路径,由后期构建事件调用?目前,我有以下(工作得很漂亮,顺便说一句): -

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

..但只有你有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>
Run Code Online (Sandbox Code Playgroud)

如何将实际输出文件夹传递给msbuild文件?我试过了...

OutputFile="$(OutDir)Foo.txt"
Run Code Online (Sandbox Code Playgroud)

但那失败了:(

干杯!

更新#1 - 回答第二个问题..

我已经找到了回答第二个问题的方法 - 不确定它是否是最好的...所以我对其他想法持开放态度:)

XML文件更改::添加一个设置内部变量名称的属性组,如果没有外部参数传递给msbuild.exe可执行文件.

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

    <Target>
        <CustomTask
           ...
           OutputFile="$(OutputFile)"
        />
    <Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

现在,调用msbuild可执行文件,如...

msbuild.exe "C:\Temp Foo\Blah\MsbuildSettings" /p:OutputFile="C:\Folder 1\Folder 2\blah\"
Run Code Online (Sandbox Code Playgroud)

那工作:)

si6*_*618 5

对于问题1,请使用属性MSBuildBinPath

对于问题2,使用属性OutputPath(C#或VB项目)

OutputFile="$(OutputPath)Foo.txt"
Run Code Online (Sandbox Code Playgroud)