CA1903:仅使用目标框架中的 API
类型名 |
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 4 |
不可用 |
若要更改项目的目标框架,请参见面向特定的 .NET Framework 版本或配置文件。
如何解决冲突
若要移除对 Service Pack 的依赖,请避免使用所有新成员或类型。 如果此依赖是有意为之,请禁止显示警告或者关闭此规则。
何时禁止显示警告
如果针对所指定 Service Pack 的依赖不是有意为之,请不要禁止显示此规则发出的警告。 在这种情况下,应用程序可能无法在没有安装此 Service Pack 的系统上运行。 如果此依赖是有意为之,请禁止显示警告或者关闭此规则。
示例
下面的示例演示使用只在 .NET 2.0 Service Pack 1 中可用的类型 DateTimeOffset 的类。 此示例要求已在项目属性中“目标框架”下拉列表中选择 .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; }
}
}
}