如何在不进行硬编码的情况下获取存储.NET引用程序集的目录的路径



C#(或Windows)是否提供了一种方法来获取包含给定版本.NET的.NET引用程序集的目录的位置?在我的机器上,它们位于:

C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv###

其中###是3.5、4.0、4.5、4.5.1、4.5.2、4.6或4.6.1中的任何一个。这些目录包含mscorlib和一些System程序集,v4.5+的目录在Facades\子目录中还有一些System程序集。

有没有比硬编码更好的方法来获取这些目录的路径?(或者,微软是否致力于将引用程序集保持在同一位置,这样硬编码就不会破坏?)

(上下文:我正在使用Roslyn编译一个项目,它没有获取我的csproj、框架或其他文件中引用的任何程序集,所以我将它们作为元数据引用手动加载。我在上面确定的目录是MSBuild运行csc时获取程序集的位置,所以我认为我也应该从那里获取程序集。)

使用Microsoft.Build.Utilities.Core:中的ToolLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies方法

foreach (TargetDotNetFrameworkVersion version in Enum.GetValues(typeof(TargetDotNetFrameworkVersion)))
{
string location = ToolLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies(version);
Console.WriteLine($"{version}: {location}");
}

GetPathToDotNetFrameworkReferenceAssemblies返回"C:\Program Files(x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\version\".

ToolLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies(TargetDotNetFrameworkVersion.VersionLatest);

如果你在GitHub上查看微软的MSBuild源代码,你可以阅读FrameworkLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies来理解逻辑。

获取.NET Framework目录路径:

的CLR活动安装目录的路径当前的.NET应用程序可以通过以下方式获得方法:

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()

最新更新