web-dev-qa-db-ja.com

.Net4への移行後のC#エラー「この言語ではサポートされていません」

Webサイトを.Net 3.5から4に移行しようとしていますが、非常に奇妙な問題が発生しています。

.Net4をターゲットにすると、3.5で正常に機能するコードが機能しなくなり、エラーが発生します

「xxxは言語でサポートされていません」。

TimeZoneInfo tzi = !calendarItem.UseUserTimeZone ? user.Settings.TimeZoneInfo : l.TimeZoneItem.Info;

そのコード行で、エラーは「.TimeZoneInfo」と「.Info」の両方に「System.TimeZoneInfo」タイプで表示されます。

user.Settings.TimeZoneInfoプロパティの定義は次のとおりです。

public TimeZoneInfo TimeZoneInfo
{
    get { return World.TimeZones[Convert.ToInt32(this[Setting.TimeZoneInfo])].Info; }
    set { this[Setting.TimeZoneInfo] = value.ToTimeZoneItem().Id.ToString(); }
}

l.TimeZoneItem.Infoプロパティの定義は次のとおりです。

public TimeZoneInfo Info
{
    get { return info; }
}

ここで何が起こっているのか本当にわかりません。それについて助けが必要です。

27
Lancelot

おそらく、アセンブリの不整合の問題です。別のプロジェクトで循環参照を作成するアセンブリを使用したいときに、この問題が発生しました。この循環参照の問題を修正すると、エラーは発生しなくなりました。

20
Jonathan Perry

これは、下位のライブラリが異なるバージョンの.NET Frameworkを使用している場合にも発生します。同様の問題があり、Lower Librariesを3.5フレームワークに更新し、実際のライブラリを3.5フレームワークに更新すると、問題は解消しました。

5
Patrick

私にとってこれは欠落または古くなったために発生しましたSystem.ValueTuple c#7で複数の戻り値を使用する場合。

エラーメッセージは少し誤解を招くです。

3
Jim

これは、プロジェクト内の他のアセンブリによって参照されているアセンブリがない場合にも発生します

1

ジョナサンペリーの回答と同様に、私の場合、コンパイルされたアセンブリではなく、古いアセンブリへの参照がありました。参照を削除し、正しいdllを指すように再度追加しました。

1

他のいくつかの投稿と同様に、私の場合、アセンブリへの参照が完全にありませんでした。作業中のプロジェクトから直接アクセスするのではなく、参照している別のリンクされたプロジェクトからアクセスしました。

1
mslissap

プロパティフィールドを別の方法で呼び出すと役立つ場合があります。 TimeZoneInfoはSystem名前空間のクラスでもあるからです。

1
Bek Raupov

ここで他のものと同様に、参照されているアセンブリが「すべてのCPU」をターゲットにしている場合、現在のアセンブリが「すべてのCPU」をターゲットにしていると問題が発生します(少なくとも64ビットマシン上)。

0
yoel halb