問題タブ [system-codedom-compiler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 埋め込まれたリソースをディスクに書き込まずにバイトの配列として読み取る方法は?
私のアプリケーションでは、CodeDom.Compilerを使用してsource.csファイルから別のプログラムをコンパイルし、コンパイル時に以下を使用していくつかのリソース(exeファイルとdllファイル)を埋め込みます。
コンパイルされたファイルでは、埋め込まれたリソースをバイトの配列として読み取る必要があります。現在、以下の関数を使用してリソースをディスクに抽出し、
この関数を使用して2つのファイルをディスクに抽出した後にこれを行います:
ハードディスクに何も書き込まずに、同じこと(埋め込みリソースをバイトの配列として取得)を行うにはどうすればよいですか?
c# - 「ソースからコンパイルされたアセンブリ」から「ホスト」コールバックを呼び出す
を使用してオンザフライでコードをコンパイルしていSystem.CodeDom.Compiler
ます。コンパイルされたソース内のすべては、私がこのソース内に置いているものは何でもうまく機能します。私は自分の関数を呼び出す方法を知っています:
ただし、WebClientを使用して、WebClient.DownloadStringAsyncを使用して非同期で文字列を取得しているとします。または、コンパイルされたソースがホストに「ねえ、私はあなたのために素敵な文字列を用意しました」と伝えたい他のコンテキスト。この例では、WebBrowserを使用しました。基本的に、ホスティングプログラムとコンパイル済みプログラムの2つのインスタンスのそれぞれを処理する方法を知っていますが、コンパイル済みプログラムがホストと通信するようにしたいです。ちなみに、私は超実験的なプログラマーではないので、わかりやすい方法は思い浮かびません。
私が試したこと:
1。動作するので実際に試す必要はありませんが、コンパイルされたソース内の文字列スタックまたはタスクキューを読み取るタイマーを使用できますが、アプリケーションの目的は、+-60個のスクリプトで実際のタスクを実行できるようにすることです。 、継続的なバックグラウンドプロセスではないため、CPUでは効率的ではありません。
2。ホスティングアプリにあるかのように、コンパイルされたソースにハンドラーを渡しました。
そしてそれは何もしませんでした。
3。コンパイルされたアセンブリに渡すことで、クラスまたは変数を共有できるかもしれませんか?
だから、問題はこれか他のどちらかです:
コンパイルされたプログラム内の特定の変数またはプロパティ内の変更を効率的に監視するにはどうすればよいですか?
ホストにコールバックを添付する方法は?
.net - .EXE から .EXE を作成する
だから私がしたいのは、vbのプログラムで実行可能ファイルを作成することです. つまり、.EXE を出力できるプログラムがあるということです。私がやろうとしているのは、事前定義されたコマンドを実行する小さなプログラムを出力できるプログラムを作成することです。
私が知っているのは、STUBで何とか可能だということだけです。STUB を開いて余分なコードを追加し、.EXE として再度保存します。
.net-assembly - CodeDOM を使用してメモリ内で生成されたアセンブリのストリームを取得することは可能ですか?
私のテストのいくつかでは、いくつかのアセンブリを生成し、 Mono.Cecil を使用してアセンブリを検査するICSharpCode.Decompilerを使用してそれらを「逆コンパイル」する必要があります。
パフォーマンス上の理由から、メモリ内にアセンブリを生成してディスク I/O を回避したいと考えています。
以下に、使用する予定のコードをいくつか示します。
問題は、 GetAssemblyContentAsStream() を実装することは可能ですか?
c# - CodeDom コンパイラ: デフォルトで参照されるアセンブリはどれですか?
短い: CompilerParameters への参照を明示的に追加せずに、既定で .NET CodeDom コンパイラ (CSharpCodeProvider
または) に含まれているアセンブリ (フレームワーク DLL) はどれですか?VBCodeProvider
CodeDom
ツール、つまりCSharpCodeProvider
とを使用して、VBCodeProvider
実行時にアセンブリをコンパイルしています。すべてではなく一部の .NET 参照アセンブリが既定で含まれていることに気付きました。
System.dll
に参照を追加せずにすべてを使用できますが、たとえばCompilerParameters
からは何も使用できません。System.Numerics.dll
後者についてはparams.ReferencedAssemblies.Add("System.Numerics.dll")
、コードに追加する必要があります。
したがって、私の質問:どのアセンブリがデフォルトで参照され、どのアセンブリが参照されていないかをどのように知ることができますか?
関連コード:
このコードは、参照を追加せずにコンパイルできます。
このコードはできません:
コンパイルに使用するコード (省略):
c# - C#でメソッドのオーバーロード解決をプログラムで行うにはどうすればよいですか?
C# コンパイラは、メソッド呼び出しを解釈するときに、(静的) 引数の型を使用して、実際に呼び出されているオーバーロードを判断する必要があります。これをプログラムで実行できるようにしたい。
メソッドの名前 (a string
)、それを宣言する型 (のインスタンス)、および引数の型のリストがある場合、標準ライブラリ関数を呼び出して、C# メソッドを表すオブジェクトSystem.Type
を取得できるようにしたいMethodInfo
コンパイラは呼び出しを選択します。
たとえば、私が持っている場合
GetOverloadedMethod
次に、この架空の機能のようなものが欲しいSystem.Type
この場合methodToInvoke
はpublic void myFunc(BaseClass bc)
.
注:どちらの方法も私の目的には役立ちGetMethod
ません。GetMethods
どちらも過負荷の解決を行いません。その場合、GetMethod
完全一致のみを返します。さらに派生した引数を与えると、単純に何も返されません。または、幸運にも、有用な情報を提供しないあいまいな例外が発生する場合があります。