从 MSBuild .targets 文件输出环境变量
Outputting environment variables from MSBuild .targets files
假设我有一个 .targets 文件,它作为一长串构建相关脚本的一部分被调用,并使用了一些环境变量。您能否建议一种调试构建过程并在构建过程到达文件后检查变量值的好方法?
环境变量是 MSBuild 在构建过程的最开始时 "read",即当您调用 MSBuild.exe 时。然后它们可以作为与环境变量同名的属性访问(例如 $(PATH)
)。
因此,如果您只需要知道环境变量的值,通常在启动时列出变量就足够了。通常使用 /v:diag
启动 MSBuild。输出将类似于:
Microsoft (R) 构建引擎版本 14.0.25420.1
版权所有 (C) Microsoft Corporation。保留所有权利。
C:\Program Files (x86)\MSBuild.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 开始时从变量初始化。
假设我有一个 .targets 文件,它作为一长串构建相关脚本的一部分被调用,并使用了一些环境变量。您能否建议一种调试构建过程并在构建过程到达文件后检查变量值的好方法?
环境变量是 MSBuild 在构建过程的最开始时 "read",即当您调用 MSBuild.exe 时。然后它们可以作为与环境变量同名的属性访问(例如 $(PATH)
)。
因此,如果您只需要知道环境变量的值,通常在启动时列出变量就足够了。通常使用 /v:diag
启动 MSBuild。输出将类似于:
Microsoft (R) 构建引擎版本 14.0.25420.1 版权所有 (C) Microsoft Corporation。保留所有权利。
C:\Program Files (x86)\MSBuild.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 开始时从变量初始化。