問題タブ [compileassemblyfromsource]
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.
system-codedom-compiler - コンパイル後のクラスと関数へのアクセス ( CompiledAssembly )
コード例をいくつか示します。これをコンパイルする方法がわかりました。その場所をつかみ、ビジュアル スタジオのオブジェクト ブラウザを使用して DLL を調べることができました。クラスインスタンスを取得して関数を呼び出す方法がわかりません。
c# - CompileAssemblyFromSourceによるメモリリークを防ぐにはどうすればよいですか?
CSharpCodeProvider.CompileAssemblyFromSourceを使用してメモリ内にアセンブリを作成しているC#コードがあります。アセンブリがガベージコレクションされた後、アプリケーションはアセンブリを作成する前よりも多くのメモリを使用します。私のコードはASP.NETWebアプリにありますが、この問題をWinFormに複製しました。System.GC.GetTotalMemory(true)とRed Gate ANTS Memory Profilerを使用して、増加を測定しています(サンプルコードで約600バイト)。
私が行った検索から、リークは新しいタイプの作成に起因しているように見えますが、実際には、参照しているオブジェクトからではありません。私が見つけたいくつかのWebページは、AppDomainについて何か言及していますが、理解できません。誰かがここで何が起こっているのか、そしてそれを修正する方法を説明できますか?
リークのサンプルコードは次のとおりです。
更新1:この質問は関連している可能性があります:CSharpCodeProviderを使用して生成されたaadllを動的にロードおよびアンロードします
更新2:アプリケーションドメインをもっと理解しようとすると、私はこれを見つけました:アプリケーションドメインとは何ですか-.Net初心者のための説明
更新3:明確にするために、メモリリークを発生させることなく、上記のコードと同じ機能(生成されたコードのコンパイルとアクセスの提供)を提供するソリューションを探しています。このソリューションには、新しいAppDomainの作成とマーシャリングが含まれるようです。
c# - CompileAssemblyFromSource が重複したファイル名で一時ファイルを生成しないようにする
私の WCF アプリケーションは、実行時にコンパイルされたコードを使用して、レポートの一部の値を計算します。CSharpCodeProvider.CompileAssemblyFromSource を使用してコードをコンパイルしています。別のレポートが計算されている間にクライアント (Silverlight アプリケーション) がレポートを要求すると、CSharpCodeProvider.CompileAssemblyFromSource が重複した名前の一時ファイルを生成し、IOException (「ファイル 'C:\Windows\TEMP\uviewdyd.out' は既に存在します。」)
これを防ぐ方法を知っている人はいますか?
c# - C# CompileAssemblyFromSource、必要な参照アセンブリを追加しますか?
私のプログラム (それをコンパイルする) が使用するアセンブリのみを参照するコードに対して、CompileAssemblyFromSource が機能しています。美しく機能します。
ただし、「何とか何とか;」を使用してコードをコンパイルする必要がある場合。ステートメントでは、何かを見つけることができず、リソースが不足していると言うことができません。
したがって、「System.Windows.Forms」であり、「compilerparams.ReferencedAssemblies.Add("System.Windows.Forms.dll")」と言えば、機能します。
コード ファイルを解析してすべての "using" パラメータを取得することはできますが、それらが "*.dll" の追加であると想定されているか、または別の場所の名前空間であるかなどをどのように知ることができますか? .NET が "System.Windows.Forms" を取り込み、"System.Windows.Forms.dll" を吐き出す方法はありますか?
c# - .NET CompileAssemblyFromSource: 失敗したソースを特定しますか?
CompileAssemblyFromSource
複数のソースを使用して、コードを動的にコンパイルしています。
コンパイルエラーが発生した場合、Errors
コレクションから行番号などを取得できます。
ただし、行番号はすべてのソース内の行番号です。必要なのは、(追加されたソースの中で) 失敗したソース内のソースと行番号です。
それは計算アクロバットをしなくても可能ですか?
c# - CodeProvider.CompileAssemblyFromSource によって生成された DLL に既存のクラスを追加するにはどうすればよいですか?
codeProvider.CompileAssemblyFromSource を使用して dll を作成し、コードを文字列として渡しています。
結果の dll に、コード内に既に存在し、変更されない別のクラスを含めたいと考えています。
つまり、次の行の代わりに:
私は何か嘘をつきたい:
それは可能ですか?
dynamic - f# powerPack codeDom の「CompileAssemblyFromSource」
f# コードを動的にコンパイルして実行するための基本的なプログラムを作成しようとしています。次のコードを実行しようとしています。
私が抱えている問題は、次の行にあります。
例外が発生する場所:The System cannot find the file specified.
必要な参照を含めましたが、Fsharp.compiler.codeDom.dll
他Fsharp.compiler.dll
に何が問題なのかわかりません。私は現在CodeDom
、codeplex から dll ソース コードを取得してステップ実行しようとしていますが、見落としている問題を誰かが見ることができれば、頭痛の種を大幅に減らすことができます。
お時間をいただきありがとうございます - アルパー
c# - CompileAssemblyFromSource テストはアセンブリに署名します
C# で記述された Windows サービスがあります。C# コードを動的に生成し、abc.dll、xyz.dll などのアセンブリにコンパイルします。これらのアセンブリは後で実行のために読み込まれます。コンパイル時に、/keyfile: mykeyfile.snk" をコンパイラ オプションの 1 つとして System.CodeDom.Compiler.CompilerParameters クラスに渡します。問題は、厳密な名前の検証に失敗したために、これらのアセンブリの一部を読み込めないことです。
テスト システムから生成されたアセンブリを取得し、sn,exe でチェックすると、アセンブリの約 6 分の 1 が遅延またはテスト署名されていることがわかります。sn.exe -v xyz.dll を実行すると、xyz.dll は遅延署名またはテスト署名されたアセンブリであることがわかります。明らかに読み込みに失敗します。
一部のアセンブリが正しく署名されていないのはなぜですか?
c# - ソース コードを含む文字列から Class オブジェクトを作成する
コードが実行時にコンパイルされ、コードが文字列に含まれる C# アプリケーションを作成しています (文字列は ScintillaNET コントロールから値を取得し、テキストを返すだけで、コードを含む文字列は意図したとおりに機能します)。
私の質問は: 実行時にこのソース コードからある種のクラス オブジェクトを作成する方法はありますか? たとえば、文字列には次の値が含まれます。
このコードは、実行時に CSharpCodeProvider コンパイラによってコンパイルされています (コンパイルするクラスの配列を渡しているため、CompileAssemblyFromSourceBatch を使用)。ただし、実行時にコンパイラの MainClass プロパティを設定できるようにしたいので、クラスから名前空間を取得する必要があります。
そこで、各クラスのソースコード文字列のある種のオブジェクトを作成して、目標を達成できるようにすることを考えていました。もちろん、他のアイデアも大歓迎です。