質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1170閲覧

System.Runtime.dllの場所を取得する

Rei_312

総合スコア24

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2022/10/22 05:32

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です。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2022/10/22 08:24

> ここからプロジェクトをダウンロード(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)
KOZ6.0

2022/10/22 08:53

TN8001 さん、ありがとうございます。 .NET 5 に移植したら動かなくなったのでソースを修正したんですね。 で、記事はそのまま、ということですか。 なるほどなるほど。
TN8001

2022/10/22 09:20

はい、そういうことだと思います(私はなにもわかっていませんが^^;
guest

回答1

0

自己解決

コメントで頂いた以下の二行を追加することで解決しました。

C#

1Assembly.GetEntryAssembly()?.GetReferencedAssemblies().ToList() 2 .ForEach(a => references.Add(MetadataReference.CreateFromFile(Assembly.Load(a).Location)));

投稿2022/10/22 12:48

Rei_312

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問