Sharepoint 2010在单个位置进行了版本检查(也从某些更新开始,WSS 3.0也进行了此类检查):
...
Version version = Environment.Version;
if (version.Major > 2)
{
...
throw new PlatformNotSupportedException(@string);
我知道,我不应该这样做,但出于好奇 - 是否有可能在没有编写巨大代理的情况下克服这个问题?
出于好奇,想知道是否有可能做到这些:
临时覆盖Environment.Version返回值,如:
using (new EnvironmentVersionOverride("2.0")) { ... }
更新:
Environment.Version
反编译来源:
public static Version Version
{
get
{
return new Version("4.0.30319.18444");
}
}
答案 0 :(得分:1)
首先,创建了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,当它的网站使用面向.NET Framework 4.0的应用程序池时,Share Point 2010将拒绝运行。
如果运行Share Point 2010 / WSS 3.0的计算机没有安装.NET Framework 3.5 SP1(包括CLR 2.0),安装它并确保应用程序池设置正确可以解决您的问题,您将不需要“代理”Environment.Version
的价值。
如果您正在尝试创建供Share Point 2010使用的库,请确保您的库的目标是.NET Framework 3.5。