情景:
我正在开发一个方面框架,并使用MSBuild Tasks拦截构建过程。我想在使用roslyn进行内部构建过程之前操作源文件。
出于开发目的,我已将这样插入的引用硬链接(我无法在实际解决方案中使用):
yield return MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
解决了这个问题:
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>
问题:
我的问题是&#34;系统&#34;的组装路径。 (例如)取决于项目文件.net版本,所以我想知道获取位置的最佳方法取决于使用.net版本构建项目文件。
到目前为止的研究:
MSBUILD:
我已经研究了MSBuild命令行args,看看这是否提供了一种方法来获取程序集的位置及其名称和网络版本:
https://msdn.microsoft.com/de-de/library/ms164311.aspx
罗斯林:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/63f716d8-734e-4ea3-b72a-1e64a5773bc9/how-do-i-use-assemblynamereference?forum=roslyn(这不再适用于当前版本的roslyn,这是有道理的,因为它也没有版本信息)
http://zacharysnow.net/2014/04/15/adding-assembly-references-in-roslyn.html
所有资源@ https://github.com/dotnet/roslyn/blob/master/docs/samples/
目前我只能想到一个相当丑陋的解决方案,它将通过主机上可用的所有框架目录并手动将版本映射到名称和位置。 (使用此处获取的信息https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx,因为这为我提供了框架安装路径或使用此方法:http://www.hexcentral.com/articles/framework-folder.htm)
我只是希望有更好的方法。
欢迎任何帮助。不幸的是,通过名称和版本来搜索&#34;汇编和#34;和它的&#39;变种没有找到对我有用的东西。
更新1:
Roslyn / Find References - Can't properly load Workspace
这可以解决我的问题,但它需要MSBuild 14.不幸的是 - 我不想依赖于在建筑主机上安装它。