問題タブ [dynamic-assemblies]
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# - メモリ内に格納されている動的に生成されたアセンブリを保存する方法は?
アセンブリをディスクに保存したり、実行時に反映したりして、アセンブリを手に入れたいと思っています。アセンブリは、サード パーティによってメモリ内に動的に生成されます。
誰もこれを行う方法を知っていますか?
.net - .net動的アセンブリ
最近、.Netの動的アセンブリについて何か知っているかどうか尋ねられました。簡単な答えは-私はしません。
動的アセンブリを作成する方法を説明する記事をたくさん見つけましたが、次のことを真に説明する記事はありません。
- それらが何であるか(それらがメモリから直接実行されることを除いて)
- 静的アセンブリに比べてどのような利点がありますか
- それらの実際の使用例
上記の説明をいただければ幸いです。
どうもありがとう。
.net - 作成後に動的アセンブリの名前を変更するにはどうすればよいですか?
作成後に動的アセンブリの名前を変更する方法はありますか? 動的メソッドを使用するフレームワークを使用しており、メイン アセンブリと同じ名前の動的アセンブリを作成しています (リソースを読み込もうとすると WPF で問題が発生します)。そのため、回避策を見つける必要があり、動的アセンブリの名前を変更しようと考えました。
GetName() を使用してから Name プロパティを設定しようとしましたが、変更が適用されないため、GetName が名前の複製を返すようです。
他に何を試すことができますか?
.net - この ExecutionEngineException の原因は何ですか?
Reflection.Emit を使用して、動的アセンブリでラッパー クラスを生成しようとしています。自動ラッパー生成は、私が書いている「GoInterfaces」という新しいオープンソース ライブラリの一部です。
ラッパー クラスは を実装IEnumerable<string>
してラップしList<string>
ます。C# の用語では、これが行うことは次のとおりです。
しかし、ラッパー クラスで GetEnumerator() メソッドを呼び出そうとすると、ExecutionEngineException が発生します。そこで、動的アセンブリを DLL に保存し、ildasm を使用しました。次のコードに何か問題がありますか?
他のインターフェイスから派生したインターフェイスや、同一のシグネチャを持つ複数のインターフェイス メソッドなど、あらゆる種類のものをラップするテスト スイートがあります。IEnumerable<T>
この問題が発生するのは、ラップしようとしたときだけです。もしよろしければ、ソース コード (2 つの *.cs ファイル、依存関係なし) を送っていただければ幸いです。
c# - 動的に生成されたアセンブリの拡張メソッド?
動的に生成されたアセンブリに拡張メソッドの静的クラスを含めようとしていますが、6 行目、28 列目で「this」という単語にある「Type expected」というコンパイラ エラーが引き続き発生します。「this」を削除しても、エラーは返されません (ただし、拡張メソッドではありません)。
これは正常に動作する生成コードです。
}
c# - 実際には利用できないGACアセンブリを期待するアセンブリを動的にロードしますか?
アプリケーションが GAC 内のアセンブリへの参照を持つアセンブリを読み込もうとしたときに、これらのアセンブリがマシン上で利用できない場合はどうなりますか?
基本的に、アセンブリの読み込みに成功して、参照されたアセンブリがエンド ユーザーのマシンで利用可能であると想定したいと考えています。私は密集していますか?
c# - dynamic キーワードが動的に読み込まれたアセンブリで機能しないのはなぜですか?
以下に示すように、使用できる CSharp 式評価器に取り組んでいます。このコンポーネントは、コードを生成してメモリにコンパイルした後、生成されたアセンブリを読み込み、生成されたクラスのインスタンスを作成して実行します。結果は辞書に保存されます。
私の問題は、例外で失敗するコードの最後の行まで、すべて正常に実行されることです。
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 'object' には 'FirstName' の定義が含まれていません。
ただし、Visual Studio はプロフェッショナルな変数コンテンツを表示できます。
そして、これはコードです:
何か案は?
ありがとうございました。
c# - .NET: 動的アセンブリからの非パブリック メンバーへのアクセス
ユーザーが任意の式を入力できるようにするライブラリに取り組んでいます。私のライブラリは、これらの式をより大きな式の一部としてデリゲートにコンパイルします。現在、理由はまだ不明ですが、Compile
時々/頻繁に式をコンパイルすると、コンパイルされた式ではない場合よりもはるかに遅いコードになります。以前にこれについて質問しましたが、回避策の 1 つは を使用せず、新しいCompile
動的アセンブリの新しい型でメソッドCompileToMethod
を作成することでした。static
それは機能し、コードは高速です。
しかし、ユーザーは任意の式を入力することができ、ユーザーが非パブリック関数を呼び出すか、式の非パブリック フィールドにアクセスするとSystem.MethodAccessException
、デリゲートが呼び出されたときに (非パブリック メソッドの場合) がスローされることがわかります。 .
ここでおそらくできることはExpressionVisitor
、式が非パブリックにアクセスするかどうかをチェックする新しいものを作成し、そのような場合は低速を使用するCompile
ことですが、動的アセンブリが非パブリックメンバーにアクセスする権利を何らかの方法で取得することをお勧めします。Compile
または、遅くなるためにできることがあるかどうかを調べます (時々)。
この問題を再現する完全なコード:
.net - 動的アセンブリによるAssembly.GetManifestResourceNames()例外
単体テスト(mstest)を実行すると、次のように呼び出すと例外が発生しますassembly.GetManifestResourceNames()
。
呼び出されたメンバーは、動的アセンブリではサポートされていません。
これは問題のあるコードです:
しかし、私がドキュメントを正しく理解していれば、それは機能するはずであり、私が使用した場合にのみ、AssemblyBuilder.GetManifestResourceNames()
この例外が発生するはずです。
.NETソースをステップスルーしようとすると、次のメッセージが表示されます。
mscorlib.dll!System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceNames()に使用できるソースがありません
なぜこの例外をスローするのですか?私は何かを逃しましたか?
テストでMoq(オプション付きmock.CallBase = True
)を使用していることを忘れてしまいました。
c#-4.0 - 実行時にアセンブリをロードし、メソッドを呼び出して、アセンブリをアンロードします
アプリケーションを作成しているときに、いくつかのSQLデータベースに接続し、データベースから詳細を取得します。
このアプリケーションでは、ユーザー名のパスワードなどのデータベース接続の詳細を暗号化する必要があります。はい、その非常に単純明快で単純な方法で、クレデンシャルを復号化するための方法を記述します。
しかし、私の場合、クレデンシャルを復号化するためにサードパーティの暗号化メカニズムに依存する必要があります。さらに、他の暗号化方式を使用するいくつかのSQLサーバーに接続する必要があります。したがって、暗号化アセンブリを動的にロードして暗号化メソッドを呼び出すようにアプリケーションをコーディングします。
しかし、アセンブリフォームAssembly.LoadFile( "Path")をロードすると、ロードされたアセンブリをアンロードできません。このアセンブリを別のアプリドメインにロードし、関連するメソッドを呼び出して、そのアプリドメインをアンロードしたと思います。この部分でいくつかの助けが必要です。知識が不足しているため、必要なメソッドを呼び出すことができません。私のコードは次のとおりです。これについて私を助けてください。
クラスApplicationSettings{
クラスDataEncryption{
前もって感謝します。