对于自定义许可方案,我们将许可代码注入用户项目(msbuild),通过其msbuild任务利用LC.exe工具。我们希望从2010年开始支持所有VS版本(截至今天:2015年)。
LC任务公开每个版本中的各个参数集。那么" TargetFrameworkVersion"参数似乎在2015年是必须的(工具版本14.0),但在早期版本中不存在。因此,我们需要对LC目标实施单独调用。目前,我们区分了这种方式:
<LC Condition="'$(MSBuildToolsVersion)'=='14.0'" ...
然而,这似乎不起作用。一个例子:
具有ToolsVersion =&#34; 14.0&#34; msbuild定义中的属性是建立在,让我们说VS2012命令提示符。 $(MSBuildToolsVersion)
解析为14,但仍然使用以下路径中的LC.exe(从msbuild日志中读取):
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\LC.exe
...对应于命令提示符的版本,我想。所以似乎不能使用$(MSBuildToolsVersion)
参数来区分实际使用的SDK工具的版本?
如何检测用于构建项目的SDK版本?
更新:我也考虑了这个answer,但它基本上只提供了一个路径 - 而不是版本。