18

Microsoft TFS API を使用していますが、いずれかのインターフェイスのプロパティの 1 つが廃止され、別のプロパティを使用するように指示されています。残念ながら、API が使用する必要のあるプロパティは、TFS2008 ではなく TFS2010 で使用されています。

私はこれをやってみました:

#pragma warning disable 0612, 0618
            request.CommandLineArguments = arguments;
#pragma warning restore 0612, 0618

しかし、CommandLineArguments が廃止されたというエラーがまだ表示されます。とにかくこれを抑制することはありますか?

編集

残念ながら、これは「エラーとしての警告」として表示されません。実際、私のプロジェクトでは警告をエラーとして扱うがオフになっています。これは、問題のあるコードのスクリーン キャップとエラー リストです。

ここに画像の説明を入力

編集2:

ILSpy を使用した後、CommandLineArguments プロパティは TFS2010 API で次のようになります。

    [Obsolete("This property has been deprecated. Please remove all references. To pass command line arguments to MSBuild.exe, set the ProcessParameters property.", true)]
    string CommandLineArguments
    {
        get;
        set;
    }

残念ながら、Obsolete 属性が原因であるエラーを無視するようにコンパイラに指示する方法はないと思います。

EDIT 3 @Peter Ritchieが指摘しているように、この値はリフレクションを介して設定できます。この問題を考えてみたところ、リフレクションを介して設定したとしても、Microsoft が例外をスローするようにプロパティを設定した場合、値がどこでも参照されるとは思えません。

4

3 に答える 3

19

私のために以下の作品:

#pragma warning disable 612,618
            request.CommandLineArguments = arguments;
#pragma warning restore 612,618

数字の先頭に0がないことに注意してください

編集:さて、あなたのアセンブリはObsoleteAttributeコンストラクターに「true」引数を持っています。これは、プロパティを使用できず、エラーが発生しないことを意味します。

このプロパティの使用を回避するためにコードを書き直すことができない場合は、リフレクションを介してプロパティセッターを呼び出す必要があります。次に例を示します。

request.GetType().GetProperty("Number").SetValue(request, arguments, null);

取得は似ています:

(string)request.GetType()。GetProperty( "CommandLineArguments")。GetValue(request、null);

于 2012-05-15T20:40:57.210 に答える
19

ビジュアル スタジオ 2015

[Obsolete] によるビルドの失敗?

これは、「Treat Warnings As Errors」が有効で、[Obsolete] 属性を持つメソッドがある場合にのみ発生します。

方法 1: エラーを警告にダウングレードする

ファイルに追加<WarningsNotAsErrors>612,618</WarningsNotAsErrors>.csprojます (すべてのセクションで繰り返します):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <WarningLevel>4</WarningLevel>
    <WarningsNotAsErrors>612,618</WarningsNotAsErrors>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
</PropertyGroup>

多くの を扱う場合は.csproj files、 を参照してくださいAppendix A: Notepad++ for search and replace

方法 2: ファイルのエラーを無視する

注: [廃止] とマークされたメソッドの警告が非表示になるため、このメソッドはお勧めしません。廃止されたメソッドへのすべての呼び出しのリストを表示して、それらをアップグレードできるようにしたいと考えています。

使用する#pragma warning disable 612,618

方法 3: プロジェクトのエラーを無視する

注: [廃止] とマークされたメソッドの警告が非表示になるため、このメソッドはお勧めしません。廃止されたメソッドへのすべての呼び出しのリストを表示して、それらをアップグレードできるようにしたいと考えています。

プロジェクトを編集します (すべてのセクションで繰り返します)。

ここに画像の説明を入力

方法 4: プロジェクトのエラーを無視する

注: [廃止] とマークされたメソッドの警告が非表示になるため、このメソッドはお勧めしません。廃止されたメソッドへのすべての呼び出しのリストを表示して、それらをアップグレードできるようにしたいと考えています。

.csproj を手動で編集して、特定のエラーの警告を無効にします。タグを追加し<NoWarn>612,618</NoWarn>ます (すべてのセクションで繰り返します):

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <NoWarn>612,618</NoWarn>
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>        
</PropertyGroup>

付録 A: 検索と置換のための Notepad++

ファイルがたくさんありますか?問題ない!

すべての.csprojファイルを NotePad++ で開き、次のようにします。

  • 探す:<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  • 交換:<TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n\t<WarningsNotAsErrors>612,618</WarningsNotAsErrors>

ここに画像の説明を入力

于 2016-11-10T10:25:12.677 に答える