两个 Visual Studio 构建后事件问题和 MSBuild
-
23-08-2019 - |
题
我有两个问题: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\"
这有效:)
解决方案
有关的问题1,使用属性的 MSBuildBinPath 强>
有关的问题2,使用属性的 OutputPath 强>(C#或VB项目)
OutputFile="$(OutputPath)Foo.txt"
其他提示
您可以将自定义任务放入 VB项目 (工程项目 如果它是一个 c# 项目)文件,然后让构建后事件使用 VS 定义的 MSBuild 变量。我正在突然想到这个过程,所以请耐心等待,哈哈。
- 在 Visual Studio 中,卸载要用于生成后事件的项目,然后右键单击卸载的项目节点并选择“编辑...”。
- 放在 使用任务 在顶部,就像你所拥有的一样。
- 重新加载项目,打开项目属性并在那里编辑构建后事件。
- 您现在应该能够访问所有这些漂亮的变量,并将它们添加到您的自定义任务中。
项目文件本身就是 MSBuild 脚本,允许您执行各种漂亮的 MSBuild 脚本技巧。
编辑:抱歉,我无法回答您提出的第一个问题。
不隶属于 StackOverflow