https://laurentkempe.com/2019/02/18/dynamically-compile-and-run-code-using-dotNET-Core-3.0/
こちらのページを参考にしてコードを動的にコンパイルしようとしています。
C#
1var references = new MetadataReference[] 2{ 3 MetadataReference.CreateFromFile(typeof(object).Assembly.Location), 4 MetadataReference.CreateFromFile(typeof(Console).Assembly.Location), 5 MetadataReference.CreateFromFile(typeof(System.Runtime.AssemblyTargetedPatchBandAttribute).Assembly.Location), 6 MetadataReference.CreateFromFile(typeof(Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo).Assembly.Location), 7};
この部分で参照するメタデータを指定してるようですが、実際に実行してみると、System.Objectが定義されているSystem.Runtime.dllが参照されていないとエラーが出ます。
実際にtypeof(object).Assembly.Locationの中身を出力してみると"System.Private.CoreLib.dll"というファイルになっていました。
System.Runtime.dllのパスを取得する方法はありますか?
.NET 6です。
https://github.com/laurentkempe/DynamicRun
ここからプロジェクトをダウンロード(Code→Download.zip)して VS2022 で開くと普通に実行できました。
> ここからプロジェクトをダウンロード(Code→Download.zip)して VS2022 で開くと普通に実行できました。
この辺が記事と違いますね。
[DynamicRun/Compiler.cs at master · laurentkempe/DynamicRun](https://github.com/laurentkempe/DynamicRun/blob/master/DynamicRun/Builder/Compiler.cs#L59)
[CSharpCompilation - error CS0012: The type 'Object' is defined in an assembly that is not referenced. · Issue #49498 · dotnet/roslyn](https://github.com/dotnet/roslyn/issues/49498)
TN8001 さん、ありがとうございます。
.NET 5 に移植したら動かなくなったのでソースを修正したんですね。
で、記事はそのまま、ということですか。
なるほどなるほど。
はい、そういうことだと思います(私はなにもわかっていませんが^^;
回答1件
あなたの回答
tips
プレビュー