Msbuild 解析项目文件中的引用名称

Msbuild 解析项目文件中的引用名称,msbuild,.net-assembly,roslyn,Msbuild,.net Assembly,Roslyn,场景: 我正在开发一个方面框架,并使用MSBuild任务拦截构建过程。我想在内部构建过程之前使用roslyn操作源文件 出于开发目的,我将插入的引用硬链接如下(我无法在实际解决方案中使用): 决议如下: C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll .csproj文件包含以下形式的引用: <Reference Include="Sy

场景:

我正在开发一个方面框架,并使用MSBuild任务拦截构建过程。我想在内部构建过程之前使用roslyn操作源文件

出于开发目的,我将插入的引用硬链接如下(我无法在实际解决方案中使用):

决议如下:

C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll
.csproj文件包含以下形式的引用:

<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />

为此:

<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
v4.5.2
问题:

我的问题是,“系统”的程序集路径(例如)取决于项目文件.net版本,因此我想知道获得位置的最佳方法,这取决于生成项目文件的.net版本

迄今为止的研究

MSbuild:

我已经查看了MSBuild命令行参数,看看这是否提供了一种通过程序集名称和网络版本获取程序集位置的方法:

罗斯林:

(这不再适用于当前版本的roslyn,因为它也没有版本信息)

所有资源@

目前,我只能想到一个相当丑陋的解决方案,它将遍历主机上所有可用的框架目录,并手动将版本映射到名称和位置。(使用此处获得的信息,因为这为我提供了框架安装路径或使用此方法:)

我只是希望有更好的办法

欢迎任何帮助。不幸的是,搜索诸如“按名称和版本组装”及其变体之类的词对我没有任何帮助

更新1:

这将为我解决问题,但它需要MSBuild 14。不幸的是,我不想依赖于它被安装在建筑主机上

<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>