如何找到安装的.NET版本?
我正在寻找像"java -version"这样简单的东西,我可以在命令提示符下键入它并告诉我当前安装的版本.
我最好补充说Visual Studio可能没有安装 - 这通常是我想知道的客户端机器.
这个问题与编程无关,因为它与部署相关.
我发现自己与公司中的小组进行了很多交谈,他们的工作是维护我们的生产Windows服务器并在其上部署我们的代码.出于法律和合规性的原因,我没有直接的可见性或对服务器的任何控制,因此我可以通过我给该组的指示来确定安装哪个.NET版本的唯一方法.
到目前为止,我可以想到的所有方法都可以告诉我们安装了哪个版本(检查管理工具是否匹配1.1或2.0,检查"添加/删除程序"列表中的条目,检查是否存在c:\ Windows\Microsoft.NET下的目录是有缺陷的(我在管理工具下看到至少一台2.0但没有2.0条目的机器 - 该方法没有告诉你3.0+,"添加/删除程序"列表可能与现实不同步,目录的存在并不一定意味着什么).
鉴于我通常需要提前知道这些事情已经到位(发现"哎呀,这个没有你需要的所有版本和服务包"并不适用于短维护窗口)我必须检查"通过代理",因为我无法直接访问服务器,什么是一个简单的方法来告诉生产Windows服务器上安装了哪个版本的.NET?最好使用框架安装的一些内在方法来实现,因为它会更快,不需要加载某种实用程序,如果框架没有正确安装但仍然有文件就可以肯定会失败的方法(即,有一个目录和gacutil.exe在那里,但该框架的版本并没有真正"安装")
编辑:如果没有一个很好的万无一失的内在方法来构建框架,有没有人知道一个好的,轻量级,无需安装的程序,可以找到这个?我可以想象有人可以轻松地写一个,但如果已经存在,那就更好了.
有没有办法获取最新的.NET Framework的csc.exe的路径?
该文件通常位于:c:\ Windows\Microsoft.NET\Framework\vX.X.XXX但问题是可以安装多个版本+有32位和64位版本.
对此有何解决方案?
过去并非每个新版本的.NET都带有新版本的CLR.我知道.NET 1.0,1.1,2.0和4.0,但.NET 3.0和3.5没有.
.NET 4.5会引入新的CLR吗?如何判断是否有新的CLR?
我们有一个只在.NET 4.5中发生的序列化问题 - 相同的代码在.NET 4中工作正常.我们尝试使用几个字段序列化一个继承的类型,基类和继承类都标记为SerializableAttribute.我们在Web服务的客户端获得一个异常,说服务器中有一个MethodAccessException,服务器本身不会抛出任何异常,这似乎是客户端序列化过程中的一个问题.重要的是要注意我们在.NET 4-而不是.4.5中进行编译
更新:实现ISerailize并忽略"Value"属性后,程序运行正常,但这意味着我们不得不放弃序列化此字段.
非常感激任何的帮助.谢谢,奥梅尔
例外细节:
System.Web.Services.Protocols.SoapException occurred
HResult=-2146233087
Message=System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.MethodAccessException: Attempt by method 'Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write88_DeviceSiteTypeInfo(System.String, System.String, IOSIGHT.Info.DeviceSiteTypeInfo, Boolean, Boolean)' to access method 'IOSIGHT.Info.DeviceSiteTypeInfo.get_Value()' failed.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write88_DeviceSiteTypeInfo(String n, String ns, DeviceSiteTypeInfo o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1310_GetSiteTypesResponse(Object[] p)
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer2089.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) …Run Code Online (Sandbox Code Playgroud) 我想更熟悉.Net Global Assembly Cache.各种来源在线说它可以在资源管理器中找到C:\ WINNT\Assembly.但是我的Windows XP机器上似乎没有C:下的WINNT文件夹.我选中了"显示隐藏文件和文件夹",并选中了"隐藏受保护的操作系统文件".
使用如何检测安装的.NET Framework版本和Service Pack中描述的方法? 特别是在http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=318785中,我看到我安装了.Net 4.0.
我怎样才能可靠地找到它,为什么它会在任何地方,但它应该在哪里?
我已经创建了一个WiX安装程序,如果它缺少,我想安装它.
为此,我已添加<PackageGroupRef Id="NetFx45Web" />到我的链中.
我遇到的一个奇怪的问题是,在.Net 3.5(Windows Vista)的机器上,一切正常,WiX正确安装.NET 4.5,但在使用.NET 4.0(Windows 7)的机器上,没有任何反应,安装程序只执行我的应用程序没有先安装.NET 4.5,然后崩溃,因为它需要.NET 4.5
我有什么遗漏或这是一个错误吗?
我需要从C\C++代码确定桌面计算机上安装的最高.NET框架版本.看起来我可以迭代下面的文件夹%systemroot%\Microsoft.NET\Framework,但这似乎有点容易出错.有没有更好的办法?也许我可以检查一个注册表项?谢谢.
.net ×8
.net-4.5 ×2
c# ×2
.net-3.5 ×1
.net-4.0 ×1
c ×1
c++ ×1
clr ×1
csc ×1
deployment ×1
gac ×1
installation ×1
web-services ×1
windows ×1
wix ×1