可以通过
的确可以,测试代码如下:
using Microsoft.Extensions.DependencyModel;
using System;
using System.Linq;
namespace Q82515
{
class Program
{
static void Main(string[] args)
{
var dc = DependencyContext.Default;
Console.WriteLine($"Framework: {dc.Target.Framework}");
dc.RuntimeLibraries
.Where(x => x.Name.Contains("Microsoft.NETCore.App"))
.ToList()
.ForEach(x =>
{
Console.WriteLine($"{x.Name} {x.Version}");
});
/*
Output:
Framework: .NETCoreApp,Version=v2.0
Microsoft.NETCore.App 2.0.5
runtime.win-x64.Microsoft.NETCore.App 2.0.5
*/
}
}
}
最新版应该是1.0.0-preview1-002702,这个要翻源码了,没看到有介绍的。
最新的.NET Core SDK的确是这个版本,我想把这个信息显示在ASP.NET Core的页面上
@dudu: 理解,去github上发个issues看看
@dudu: 晚上看了下 dotnet cli
源码,里面用于显示dotnet cli 版本的代码如下:
private static string GetCommitSha()
{
var versionFile = DotnetFiles.VersionFile;
if (File.Exists(versionFile))
{
return File.ReadLines(versionFile).FirstOrDefault()?.Substring(0, 10);
}
return null;
}
namespace Microsoft.DotNet.Cli.Utils
{
public static class DotnetFiles
{
private static string SdkRootFolder => Path.Combine(typeof(DotnetFiles).GetTypeInfo().Assembly.Location, "..");
/// <summary>
/// The CLI ships with a .version file that stores the commit information and CLI version
/// </summary>
public static string VersionFile => Path.GetFullPath(Path.Combine(SdkRootFolder, ".version"));
}
}
其实就是读取文件内容,如下:
如果想要的是 .net Core Runtime ( CoreRT 本机工具链),代码如下:
Process process = new Process { StartInfo = new ProcessStartInfo() { Arguments = "--version", CreateNoWindow = true, FileName = "dotnet", RedirectStandardOutput = true } }; process.Start(); process.WaitForExit(); var version = process.StandardOutput.ReadToEnd().Trim();
如果想要的是.net core的版本, .net core 其实就是一堆类库,是以包的形式发布的。就像我们将项目中的package引用修改后,就从RC1变成RC2了。所以只需要确定引用包的版本就可以了,下面的代码检测.net core版本,而不是ASP.NET Core版本
var configuration = new ConfigurationBuilder() .AddJsonFile("project.json").Build(); return configuration.GetValue<string>("dependencies:Microsoft.NETCore.App:version");
下面这种方式不可用的原因是,它检查的是程序集的版本,而不是包的版本,两者可能相同也可能不同。
RuntimeVersion = typeof(object).GetTypeInfo().Assembly.GetName().Version.ToString();
dotnet -v 获取到的是.NET Core SDK的版本
configuration.GetValue<string>("dependencies:Microsoft.NETCore.App:version") 获取到的是.NET Core Runtime Framework的版本,有个更简单的获取方法:
PlatformServices.Default.Application.RuntimeFramework.FullName
@dudu: Framework版本是可以人为修改的,感觉不可靠。