僅使用目標 Framework 的 API
更新:2007 年 11 月
TypeName |
UseOnlyApiFromTargetedFramework |
CheckId |
CA1903 |
Category |
Microsoft.Portability |
中斷變更 |
中斷 - 對外部可見成員或型別的簽章引發時。 非中斷 - 在方法主體中引發時。 |
原因
某一個成員或型別使用的是 Service Pack 中所含的成員或型別,但是專案的目標 Framework 中卻沒有包含該成員或型別。
規則描述
.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 產生相依的關係。為了避免產生這樣的相依關係,所使用的任一新成員及型別,只要不是專案目標 Framework 預設包含的範圍,便會引發這項規則。
目標 Framework 與 Service Pack 的相依性
當目標 Framework 為 |
使用下列版本中包含的成員時引發 |
.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 |
若要變更專案的目標 Framework,請參閱以特定的 .NET Framework 為目標平台。
如何修正違規
若要移除 Service Pack 上的相依性關係,請停止使用所有新成員或型別。如果這個相依性關係是刻意建立的,可以隱藏不要顯示警告或是關閉這個規則。
隱藏警告的時機
如果這並不是特定 Service Pack 上刻意建立的相依性,請不要隱藏這項規則的警告。 在這種情況下,您的應用程式可能會因為沒有安裝這個 Service Pack 而無法在系統上執行。如果這個相依性關係是刻意建立的,可以隱藏不要顯示警告或是關閉這個規則。
範例
下列範例所示範的類別,會使用只有在 .NET 2.0 Service Pack 1 中才提供的型別 DateTimeOffset。這個範例需要使用 .NET Framework 2.0,而這個項目已經在 [專案] 屬性中的 [目標 Framework] 下拉式清單中選取了。
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; }
}
}
}
以下範例修正了先前說明的違規,即使用 DateTime 型別來取代 DateTimeOffset 型別的問題。
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; }
}
}
}