假设我有一个.targets文件,它被调用为与构建相关的脚本的长链的一部分,并使用了一些环境变量。您能否建议一种调试构建过程并在构建过程到达文件后检查变量值的好方法?
环境变量在生成过程开始时由 MSBuild "读取",即当您调用 MSBuild.exe 时。然后,它们可以作为与环境变量同名的属性进行访问(例如 $(PATH)
)。
因此,如果您只需要知道环境变量的值,则在启动时列出变量通常就足够了。通常从/v:diag
开始MSBuild。输出将如下所示:
Microsoft (R) 生成引擎版本 14.0.25420.1版权所有 (C) Microsoft 公司。保留所有权利。
C:Program Files (x86)MSBuild14.0binMSBuild.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:UsersfoobarAppDataRoaming
...
但请注意,环境变量的值在整个生成过程中将保持不变 (*),有趣的问题是 MSBuild 属性的值(已在生成开始时使用环境变量的值初始化)在生成过程中的某个时间点是多少。
可以覆盖属性值(通过在命令行上指定,通过在 <PropertyGroup>
-元素中显式设置 等)。评估的顺序也很重要。
如果只需要在任务执行期间知道属性的值,则使用 <Message Importance="high" Text="$(myproperty)"/>
通常就足够了。除此之外,请注意,还可以调试 MSBuild 执行。
(*) 假设没有自定义任务在幕后使用类似Environment.SetEnvironmentVariable()
的东西来设置它。但这反过来不会更改从 MSBuild 开头的变量初始化的属性的值。