🙌
Constructors of types with required members are not supported.の解決方法
はじめに
Claudiaを使用していたところ、Rider上で以下のようなエラーが発生しました。
Rider上のエラー文1
コンストラクター 'Claudia.Message.Message()' は古い形式です: Constructors of types with required members are not supported in this version of your compiler.
Rider上のエラー文2
コンストラクター 'Claudia.MessageRequest.MessageRequest()' は古い形式です: Constructors of types with required members are not supported in this version of your compiler.
UnityEditor上ではエラーが発生しなかったため、そのまま使用していましたが、気になったので調査してみました。この記事では、エラーの原因と解決方法を紹介します。
エラーが発生したコード
以下のコードを実行した際に、上記のエラーが発生しました。
エラーが発生したコード
var input = new Message
{
Role = Roles.User,
Content = instructionField.text,
};
var message = await anthropic.Messages.CreateAsync(new()
{
Model = Models.Claude3Haiku,
MaxTokens = 1024,
System = FunctionTools.SystemPrompt,
StopSequences = new[] { StopSequnces.CloseFunctionCalls },
Messages = new[] { input },
});
原因
エラーが発生したコードで使用されているMessageクラスを確認してみると、以下のようなコードになっていました。
Message
namespace Claudia
{
[RequiredMember]
public record Message()
{
// ...
}
}
ここで使用されている[RequiredMember]属性がエラーの原因でした。[RequiredMember]は、C# 11で導入された新しい属性であり、レコードのプロパティやコンストラクターの引数に適用することで、そのメンバーが必須であることを示すことができます。
プロジェクトのC#のバージョン(LangVersion)が10以前に設定されていたため、[RequiredMember]属性がサポートされておらず、エラーが発生していたのです。解決方法
解決方法は簡単です。プロジェクトのC#のバージョンを11以降に変更するだけで、エラーが解消されます。
具体的には、Assets直下にあるLangVersion.propsファイルを開き、<LangVersion>タグの値を11に変更します。なければ、LangVersion.propsを追加する必要があります。
変更後のLangVersion.prop
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LangVersion>11</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
変更後、エラーが解消されます。
おわりに
今回は、'Constructors of types with required members are not supported in this version of your compiler'エラーの原因と解決方法を紹介しました。
さて、記事を書いての疑問ですがUnityはLangVersionがcsc.rspで10に設定されているはずです。なぜ、Unityではエラーが起きないのかが疑問に残っています。
Discussion