【问题标题】:Two Visual Studio Post-build Event questions and MSBuild两个 Visual Studio 构建后事件问题和 MSBuild
【发布时间】:2009-07-06 14:16:25
【问题描述】:

我有两个问题:visual studio 2008 和构建后事件。

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 - 回答第二个问题..

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

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\"

这行得通:)

【问题讨论】:

    标签: visual-studio-2008 msbuild post-build-event


    【解决方案1】:

    对于问题 1,使用属性 MSBuildBinPath

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

    OutputFile="$(OutputPath)Foo.txt"
    

    【讨论】:

    • 嗯。你能详细说明这个输出路径变量吗?我还更新了我最初的帖子.. 是一样的吗?
    • 阅读你的 csproj 文件(假设这里是 C#),你会看到每个平台(AnyCPU|etc)的每个构建类型(调试|发布)都有一个基于条件的属性组,在该属性组中,始终定义了一个 OutputPath 属性,这是生成程序集的位置以及您标记为“复制到输出目录”的任何内容。
    【解决方案2】:

    您可以将自定义任务放入 vbproj(如果是 c# 项目,则为 csproj)文件,然后让构建后事件使用 VS 定义的 MSBuild 变量.我正在考虑这个过程,所以请耐心等待,哈哈。

    1. 在 Visual Studio 中,卸载要用于生成后事件的项目,然后右键单击卸载的项目节点并选择“编辑...”。
    2. UsingTask 放在顶部,就像您拥有的一样。
    3. 重新加载项目,然后打开项目属性并在那里编辑构建后事件。
    4. 您现在应该可以访问所有这些漂亮的变量,并将它们添加到您的自定义任务中。

    项目文件本身就是 MSBuild 脚本,允许您执行各种漂亮的 MSBuild 脚本技巧。

    编辑:抱歉,你问的第一个问题我没有答案。

    【讨论】:

    • 嗯。有趣:) 我也想出了另一种方法(当你添加你的答案时)。查看我对开篇文章的补充。
    • 这是解决 #2 的一种方法,如果路径发生变化,您只需在一个位置更新属性变量。同时,为了回答 #1,如果您使用 VS 2005(或 2008)Cross x64 命令提示符来运行您的脚本,您只需输入 MSBuild 即可完成设置。
    • 实际上,对于#1,Si 回答正确,如下 :) 完美!
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多