从MSBuild .targets文件输出环境变量

时间:2016-07-11 13:10:38

标签: msbuild environment-variables targets

假设我有一个.targets文件,它被作为一系列构建相关脚本的一部分调用,并使用了一些环境变量。你能建议一个好的方法来调试构建过程并在构建过程到达文件后检查变量的值吗?

1 个答案:

答案 0 :(得分:3)

环境变量是"读"由MSBuild在构建过程的最开始,即当您调用MSBuild.exe时。然后可以将它们作为与环境变量同名的属性(例如$(PATH))进行访问。

因此,如果您只需要知道环境变量的值,通常在启动时列出变量就足够了。通常使用/v:diag启动MSBuild。输出将类似于:

Microsoft(R)Build Engine版本14.0.25420.1 版权所有(C)Microsoft Corporation。保留所有权利。

C:\Program Files (x86)\MSBuild\14.0\bin\MSBuild.exe /v:diag .\clrinfo32.csproj
Build started 12.07.2016 14:51:35.
Environment at start of build:
ActiveLanguage = en-US
ALLUSERSPROFILE = C:\ProgramData
APPDATA = C:\Users\foobar\AppData\Roaming
...

但是请注意,环境变量的值对于整个构建过程(*)将保持不变,有趣的问题是MSBuild属性的值(已使用环境变量的值初始化)在构建开始时)是在构建过程中的某个时间点。

可以覆盖属性值(通过在命令行上指定,通过在<PropertyGroup> - 元素中明确设置等)。 order of evaluation也很重要。

如果您只需要在任务执行期间知道属性的值,那么使用<Message Importance="high" Text="$(myproperty)"/>通常就足够了。除此之外,请注意MSBuild的执行也可以是debugged

(*)假设没有自定义任务在幕后使用Environment.SetEnvironmentVariable()之类的东西进行设置。但这反过来又不会改变在MSBuild开始时从变量初始化的属性的值。