仅使用目标框架中的 API
更新: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; }
}
}
}