微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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类)
>临时覆盖Environment.Version返回值,类似于:

使用(new EnvironmentVersionOverride(“2.0”)){…}
>其他一些方式?

更新:
Environment.Version反编译源:

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为目标.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐