共用方式為


僅使用目標 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; }
        }
    }
}

請參閱

其他資源

可攜性警告

以特定的 .NET Framework 為目標平台