お世話になっております。
さて、Add-TypeでC# 7.3相当のコードを読み込もうとして、
$cs='public class A<E> where E : Enum {}'
Add-Type -TypeDefinition $cs
とすると、
型または名前空間名 'Enum' が見つかりませんでした。usingディレクティブまたはアセンブリ参照が不足しています。
というエラーになってしまいました。ジェネリックの型引数の制約でEnumというのは列挙型を意味していて、C# 7.3で採用された新機能です。
そこで、明示的に言語バージョンを指定して、
$o=[System.CodeDom.Compiler.CompilerParameters]::new()
$o.CompilerOptions='/langversion:7.3'
Add-Type -TypeDefinition $cs -CompilerParameters $o
としたところ、
/langversion に対する無効なオプション '7.3' です。ISO-1、ISO-2、3、4、5、または Default でなければなりません。
というエラーが出て、Add-Typeが認識可能なC#の言語バージョンが5までとなっていることが判明しました。使用しているPowerShellは、Windows PowerShell 5.1、.Net Frameworkは4.8となっています。
最新のC#の言語バージョンを手っ取り早く使う方法は、クロスプラットフォームの.Net Core 3.1とPowerShell Core 6.2に乗り換えることですが、互換性の面で不安があるため踏み切れていません。
そこで、今使っているWindows PowerShellおよび.Net Frameworkに搭載されているC#コンパイラーを7.3相当のものに入れ替えたいのですが、果たしてそのようなことは可能なのでしょうか。