問題タブ [createinstance]
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# - Activator.CreateInstance が「指定されたファイルが見つかりません」という例外をスローします。
ソリューションで使用されるアセンブリのコードをコピーして、同様のアセンブリを作成しました。GUTS は異なっていましたが、シェルは同じままでした。
これらのアセンブリは、アドオンであり、コア コードの一部ではないクライアントのプロジェクトで使用されます。完成したので、アセンブリは想定どおりにロードしたくありません。
アセンブリをロードするコードは
CreateInstance 部分で例外が発生します。
興味深いのは、私が使用するとき
アセンブリをロードして型を取得すると、CreateInstance が機能します。
アンラップが必要な理由 2 つの異なる読み込み方法に違いはありますか? そして、なぜ最初のものは機能しないのですか?
ありがとう
J
c# - Activator.CreateInstance と Activator.CreateInstance の違い
次のコードを書くとき、それらの違いは何ですか:
実際の型はコンパイル時にすでにわかっているため、後者の方がはるかに高速であると予想していましたが、違いはありません。私のマシンでは、両方とも約9秒で動作します。では、内部で使用される手順を考慮した場合の違いは何ですか?
c# - 子ドメインでの C# アセンブリの作成インスタンス
プラグイン フレームワークを作成し、C# でリフレクションによって依存関係を読み込もうとしています。私の現在の実装は次のとおりです。
新しいアプリケーション ドメインを作成する Windows サービスがあります。次に、PluginProxy を取得し、LoadDependencies と ProcessProxy を呼び出します。依存関係を子ドメインにロードしようとしていることに注意してください。
問題は zGetTypes メソッドにあります。このメソッドは、IPlugin の種類を見つけることができます (intellisense が示しています)。ただし、Activator.CreateInstance を呼び出しても、型は初期化されません (null)。
子ドメインにいる場合、zGetTypes はタイプ IPlugin のインスタンスを作成できないことに注意してください。
アセンブリ アセンブリ = pluginDomain.Load(AssemblyName.GetAssemblyName(file.FullName));
別のアプリドメインを作成せず、アセンブリをメインのアプリドメインにロードするだけで、インスタンスの作成が機能します。私の場合、サービスの appdomain は子 appdomain を作成します。プラグインのアセンブリをプロキシにロードする責任をプッシュしたい。Proxy は MarshalByRefObject から派生するため、インスタンスを作成して Windows サービス側からアンラップできます。
その後、サービスはプラグインの読み込みとライフサイクル管理をプロキシに委任します。プロキシは、LoadDependencies へのメソッド パラメーターを介して子 appdomain のコンテキストを取得します。
IPlugin のインスタンスが作成されない理由はありますか?
c# - Activator.CreateInstance で作成されたオブジェクト ハンドルを基本クラスにアンラップする方法は?
前回の質問では、すべての派生クラスに独自のオプション クラスを実装させたいと考えていました。与えられた答えは私の問題の解決策を提供しましたが、オブジェクトハンドルをアンラップできなくなったため、別の問題が発生しました。
空のパブリック インターフェイスとそれを実装するクラスを作成しました。
TaskOptions
次に、IOptions の型である抽象パラメーターを持つ基本クラスを作成しました。
最後に、Task クラスを拡張する一連のクラスを作成しました。
メイン プログラムは、ID、名前などを定義する json 表記を持つファイルをタスクと共に取得する Job オブジェクトを初期化します。
最後に、ジョブクラスは次のとおりです。
Task クラスを変更して IOptions インターフェイスを実装する前に、次のようにアンラップしました。
これは機能しましたが、追加IOptions
してキャストした後Task<IOptions>
、taskobj は TaskSearch (Task ではない) であるため、System.InvalidCastException エラーがスローされます。
手動で入力Task<SearchOptions>
するとラップが解除されますが、タイプがTask<IOptions>
. Tasksリストをジェネリックにして、すべての派生クラスを受け入れ、taskobj をアンラップする前に型パラメーターを取得する方法を見つけるか、現在のタスク名を保持するtaskclass文字列から取得する方法を見つける必要があります。
必要に応じてオプションの辞書を作成しますが、これが私が実装したかった方法であり、できるかどうか知りたいです。
ありがとうございました
c# - CreateInstance() を使用して「タイプが見つかりません」というエラーが発生する
.CreateInstance()
XML をシリアル化しながら、C# プロジェクトの接続ユーティリティで使用しようとしています。.Unwrap()
シリアライズ可能な戻り値の型をアンラップし、作成しようとしている型のインスタンスを取得するために使用されます。
私のアセンブリRPM_Model
atは正常に読み込まれますが、タイプin@"D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model"
の結果として、次のエラーが発生します。ARC_LOGONRS
responseName
ARC_LOGONRS
メソッド ConnectUtil.Execute のエラー:アセンブリから型を読み込めませんでしRPM_Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
た。
1.エラー
で指定されたアセンブリを参照しました。
2. GAC には、フォルダー内の .dll をオーバーライドするものはありません。3.正しいバージョンの .dll があることを確認しました。4. .dll には他の依存関係はありません。5.プロジェクトと .dll のターゲット プラットフォームが同じです。6.アセンブリを適切に参照していることはわかっています。コードを配置してその上にカーソルを合わせると、/Debug
ARCLOGON_RS
クラス RPM.Model.Data.ARCLOGON_RS
f12
焦点を合わせてプロパティを確認できます。
7.両方のソリューションをクリーンアップして再構築しました。
8.型にはpublic デフォルト コンストラクターがあり、クラスは public です。
9. .dllは参照ノードにあります。
10.正しいアセンブリ名がパラメーターとして渡されています。
私の質問は、私のプロジェクトがこのエラーをスローする理由と、診断が完全になくなったので、それを修正する方法について他に考えがあるかどうかです。
助けてくれてありがとう。
c# - 引数が参照で来る場合の GetMethod
リフレクションを使用してオブジェクトのインスタンスを作成し、オブジェクトのクラス内でメソッドを取得していますが、Type
あいまいさの問題を回避するために型の配列を使用する必要がある場合に問題が発生します。到達しようとしています。
このコードは外部アセンブリ (file.dll) からのもので、次のコードを使用しています。
3つの引数を使用するオブジェクトの を取得するのにMethodInfo
、変数 inf が null になるのは、ref を使用する引数のメソッドが見つからないためだと思います。
これを解決する方法はありますか?
c# - 型と値の文字列表現しかない場合、特定の値に既に設定されている型のインスタンスをどのようにインスタンス化できますか?
次の 4 つの文字列があります。それぞれが値とそのデータ型を表す文字列を持つ 2 つのペア。
私はそれぞれのタイプを取得できることを知っています...
...そして、このようなタイプの新しいインスタンスをアクティブ化できます...
stringValueOfA
...しかし、文字列表現でエンコードされた値に設定されたインスタンスを作成する方法がわかりませんstringValueOfB
.
解決策が何であれ、ボクシングもできれば避けたいです。そうではないと思いますが、間違っていることを願っています。