PowerShell脚本在计算机上返回.NET Framework版本会是什么?
我的第一个猜测涉及WMI.还有更好的东西吗?
它应该是一个单行程序,只返回每个.NET [每行]安装的最新版本.
如何从命令提示符窗口编译和执行.cs文件?
有没有办法获取最新的.NET Framework的csc.exe的路径?
该文件通常位于:c:\ Windows\Microsoft.NET\Framework\vX.X.XXX但问题是可以安装多个版本+有32位和64位版本.
对此有何解决方案?
我的实际问题是我遇到了两个版本的.NET 4.5完整设置:
50,349,920a5e81d1b3905ada0a6e35fd6c6a2e1f450,352,408d02dc8b69a702a47c083278938c4d2f1这两个设置的版本是4.5.50709.17929.在内部,主要的区别是netfx_Full.mzz文件,但在使用7-zip解压缩内容后,我最终得到了大量具有相同版本的文件,即使文件内容不同(我已经检查了大约42个的大约20个随机文件)所以我无法确定哪一个更新.
有没有办法可靠地检测已安装的.NET 4.5运行时的实际版本,所以我只能在真正需要时运行安装程序?
更新
我检查了所有具有不同内容的426个文件,并且它们在两个设置中都具有相同的ProductVersion和FileVersion.因此,注册表或文件校验和是下一步.
更新2
注册表中列出的版本对于两个设置都是相同的: 4.5.50709
更新3
.NET 4.5.2现已推出:
此版本的.NET Framework与.NET Framework 3.5 SP1和早期版本并行运行,但对.NET Framework 4,.NET Framework 4.5和.NET Framework 4.5.1执行就地更新.
我运行aspnet_regiis.exe,仍然得到同样的错误:
无法从程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.ServiceModel.Activation.HttpModule'.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.异常详细信息:System.TypeLoadException:无法从程序集"System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"加载类型"System.ServiceModel.Activation.HttpModule".
我需要在我的Web应用程序中确定客户端.NET框架版本.我正在部分信任,所以我无法读取文件系统或注册表(有没有一种简单的方法来检查.net框架verison使用C#?).
System.Environment.Version返回运行时版本,因此我无法使用它.
我不能使用javascript
我现在能想到的唯一方法是尝试加载.NET 3.5 dll并捕获异常,但这听起来不太好.
有什么建议?
更新:
Request.Browser.ClrVersion并且Request.Browser.GetClrVersions()将返回客户端上安装.NET Framework版本(S).
我已经提到了Stack Overflow问题有没有一种简单的方法来检查.NET Framework版本?.但是那里给出的建议并不适用于以下目的.
我们如何识别C#控制台应用程序正在使用的.NET版本?
环境:
码
using System;
using System.Globalization;
using Microsoft.Win32;
namespace TESTConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//.NET version: Approach 1
RegistryKey installed_versions = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP");
string[] version_names = installed_versions.GetSubKeyNames();
double latestFramework = Convert.ToDouble(version_names[version_names.Length - 1].Remove(0, 1), CultureInfo.InvariantCulture);
int SP = Convert.ToInt32(installed_versions.OpenSubKey(version_names[version_names.Length - 1]).GetValue("SP", 0));
Console.WriteLine(latestFramework);
//Approach 2
string versionval = Environment.Version.ToString();
Console.WriteLine(versionval);
//Approach 3
string systemVersionVal = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion().ToString();
Console.WriteLine(systemVersionVal);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
产量

版本设置

在开始我的应用程序之前(在表单加载上)我想检查并确保在机器上安装.NET框架(3.5或更高版本) - 如果不是我想提示用户下载并安装它(带有INTERNET的简单MessageBox)链接到Microsoft WebPage会是最好的想法吗?)所以,这实际上需要两个问题......
a)如何安装.NET FrameWork 3.5或更高版本,如何确定?(我不信任或者只想找C:\ Program Files\Microsoft.NET文件夹,看起来容易出错吗?)看到这是非常关键的,必须有一个很好的方法在C#中确定什么版本用户在他的机器上运行的.NET?我只是不知道如何..
b)如何在MessageBox中粘贴INTERNET LINK(超链接?)?因此,如果用户没有安装.NET框架(1.1或2.0),我可以让他们只需点击链接即可下载吗?
任何帮助/提示将不胜感激.
谢谢,丁
是否可以使用预处理程序指令检测当前版本的C#是否为6或更高,因此在编译时?
我想做这样的事情:
var myVar = ...;
string name;
#if VERSION_6_OR_MORE
name = nameof(myVar);
#else
name = "myVar";
#endif
Run Code Online (Sandbox Code Playgroud)
我使用Visual Studio 2015和C#6,所以我可以使用nameof().其他想要编译此代码的人可能正在使用旧版本,但nameof()不存在.
我想使用预处理器指令,所以我可以保留nameof()在C#6中,但是不使用该版本的其他人也可以编译它.
您可以使用System.Environment.Version获取CLR的版本; 你如何获得当前使用的C#版本和.NET或Mono框架?
编辑:我不是问如何找到你是使用Mono还是.NET.(我的问题的第一个版本确实问过这个问题,但是当我在其他地方看到这个问题时,我几乎立即将其删除了.)这里的问题是(1)如何弄清楚你正在使用的C#版本,(2)您拥有的.NET版本(与CLR的版本相反,这不是同一件事).
c# ×9
.net ×6
asp.net ×3
version ×2
.net-3.5 ×1
.net-4.0 ×1
.net-4.5 ×1
command-line ×1
compilation ×1
csc ×1
iis ×1
mono ×1
powershell ×1
wpf ×1