c# – 是否有可能伪装成比实际更低的.NET版本?
Sharepoint 2010在单个位置进行版本检查(也从一些更新开始WSS 3.0也有这样的检查):
... Version version = Environment.Version; if (version.Major > 2) { ... throw new PlatformNotSupportedException(@string); 我知道,我不应该这样做,但出于好奇 – 是否有可能在不编写巨大代理的情况下克服这个问题? 出于好奇,想知道是否可以做以下任何一件事: >在运行时调整sharepoint的dll中的这个检查来传递(类,使用它是密封的和内部的,如果你很好奇,它是Microsoft.SharePoint.dll中的Microsoft.SharePoint.Administration.SPConfigurationDatabase类) 使用(new EnvironmentVersionOverride(“2.0”)){…} 更新: public static Version Version { get { return new Version("4.0.30319.18444"); } } 解决方法
首先,创建了WSS 3.0 / Share Point 2010,以便Microsoft的工程师确切地知道哪个版本的公共语言运行时(CLR)WSS 3.0 / Share Point 2010可以无错误地运行.
如上所述,Environment.Version返回当前在您的进程中加载??的CLR版本(不是.NET Framework版本).没有办法“伪造”或“代理”这个值.如果您在Windows 7,Windows Server 2008或Windows Server 2008 R2计算机上运行SharePoint,则会自动安装CLR 2.0(但我不确定Windows 8或Windows Server 2012). 在我看来,您需要确保运行Share Point 2010(或WSS 3.0)网站的IIS中的应用程序池使用.Net Framework版本2.0.50727(这意味着使用CLR 2.0).如here所述,Share Point 2010将在其网站使用面向.NET Framework 4.0的应用程序池时拒绝运行. 如果运行Share Point 2010 / WSS 3.0的计算机没有安装.NET Framework 3.5 SP1(包括CLR 2.0),安装并确保应用程序池设置正确可以解决您的问题,您不需要“代理” “Environment.Version的价值. 如果您正在尝试创建供Share Point 2010使用的库,请确保您的库以.NET Framework 3.5为目标. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |