更新:2007 年 11 月
| TypeName | UseOnlyApiFromTargetedFramework | 
| CheckId | CA1903 | 
| 类别 | Microsoft.Portability | 
| 是否重大更改 | 重大更改 - 当针对外部可见成员或类型的签名激发时。 非重大更改 - 当在方法体中激发时。 | 
原因
成员或类型将使用 Service Pack 中引入的成员或类型,项目目标框架中未及包括它们。
规则说明
.NET Framework 2.0 Service Pack 1 和 2、.NET Framework 3.0 Service Pack 1 和 2 以及 .NET Framework 3.5 Service Pack 1 中包括了新的成员和类型。以 .NET Framework 的主要版本为目标的项目可能会在无意中依赖这些新的 API。为避免这种依赖性,使用默认情况下没有包括在项目目标框架中的任何新成员和类型时,将激发此规则。
目标框架和 Service Pack 的依赖关系
| 对于以下目标框架 | 使用以下框架中引入的成员时将激发规则 | 
| .NET Framework 2.0 | .NET Framework 2.0 SP1 和 .NET Framework 2.0 SP2 | 
| .NET Framework 3.0 | .NET Framework 2.0 SP1、.NET Framework 2.0 SP2、.NET Framework 3.0 SP1 和 .NET Framework 3.0 SP2 | 
| .NET Framework 3.5 | .NET Framework 3.5 SP1 | 
若要更改项目的目标框架,请参见以特定的 .NET Framework 为目标。
如何修复冲突
若要移除对 Service Pack 的依赖,请避免使用所有新成员或类型。如果此依赖是有意为之,请禁止显示警告或者关闭此规则。
何时禁止显示警告
如果针对所指定 Service Pack 的依赖不是有意为之,请不要禁止显示此规则发出的警告。在这种情况下,应用程序可能无法在没有安装此 Service Pack 的系统上运行。如果此依赖是有意为之,请禁止显示警告或者关闭此规则。
示例
下面的示例显示了一个使用类型 DateTimeOffset 的类,该类型仅在 .NET 2.0 Service Pack 1 中可用。此示例要求已在“项目”属性的“目标框架”下拉列表中选择了“.NET Framework 2.0”。
using System;
namespace Samples
{
    public class LibraryBook
    {
        private readonly string _Title;
        private DateTimeOffset _CheckoutDate;   // Violates this rule
        public LibraryBook(string title)
        {
            _Title = title;
        }
        public string Title
        {
        get { return _Title; }
        }
        public DateTimeOffset CheckoutDate      // Violates this rule
        {
            get { return _CheckoutDate; }
            set { _CheckoutDate = value; }
        }
    }
}
下面的示例将使用的 DateTimeOffset 类型替换为 DateTime 类型,从而解决上面描述的冲突。
using System;
namespace Samples
{
    public class LibraryBook
    {
        private readonly string _Title;
        private DateTime _CheckoutDate;
        public LibraryBook(string title)
        {
            _Title = title;
        }
        public string Title
        {
            get { return _Title; }
        }
        public DateTime CheckoutDate
        {
            get { return _CheckoutDate; }
            set { _CheckoutDate = value; }
        }
    }
}