实现 microsoft.build.utilities.task 时,如何访问构建的各种环境变量?
实现 microsoft.build.utilities.task 时,如何访问构建的各种环境变量?
例如“TargetPath”,
我知道我可以将它作为任务 XML 的一部分传递,
<MyTask TargetPath="$(TargetPath)" />
但如果我可以访问代码中的变量,我不想强迫任务的使用者必须这样做。
http://msdn.microsoft.com/en-我们/library/microsoft.build.utilities.task.aspx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我想出了如何做到这一点
它可以像这样使用是的,
这是丑陋的黑魔法,但它有效。
I worked out how to do this
And it can be used like this
Yes it is ugly and black magic but it works.
你不能轻易做到这一点,也不应该这样做。任务不应该知道其执行上下文,并且应该使用其输入参数。
免责声明:不要这样做!
如果你真的想这样做,你需要用类似的东西重新解析项目文件。
You can not do this easily and you shouldn't do it. A task shouldn't know its context of execution, and should work with its input parameters.
Disclaimer : Don't do it!
If you really want to do it, you would need to reparse the project file with something like that.
基于 Simon 的答案,该答案
为前缀_
我最终得到了以下结果。请注意,
ProjectInstance
类型被视为“特定于实现”,因此您必须将PackageReference
添加到Microsoft.Build
才能访问它。我发现
ProjectInstance
包含GetProperty
和GetItems
的公共定义,因此我没有费心使用反射来访问这些定义。为了方便起见,并减轻通过反射获取
ProjectInstance
的开销,我定义了一个TaskBase
类:我发现它工作得非常好!
Building upon Simon's answer, which
_
I ended up with the following. Note, the
ProjectInstance
type is considered 'implementation specific' and so you have to add aPackageReference
toMicrosoft.Build
to access it.I found that
ProjectInstance
contains public definitions forGetProperty
andGetItems
so I didn't bother using reflection to access those.For convenience, and to mitigate the overhead of getting the
ProjectInstance
by reflection, I defined aTaskBase
class:Which I found worked perfectly!