次のスニペットでは、オブジェクトのパラメータをスクリプトのメソッドに渡す方法を教えてください。オブジェクトをスクリプトに渡すには?
3
A
答えて
2
Globals
タイプは、グローバル変数宣言をそのプロパティとして保持する必要があります。あなたはMyClass型のグローバルなVARを定義する必要が
var metadata = MetadataReference.CreateFromFile(typeof(MyClass).Assembly.Location);
オプション1
:
public class Globals
{
public MyClass C { get; set; }
}
あなたのスクリプトの正しい参照を得たと仮定すると、
それをGlobals
タイプとして使用してください:
var script =
await CSharpScript.Create(
code: code,
options: ScriptOptions.Default.WithReferences(metadata),
globalsType: typeof(Globals))
.ContinueWith("new TestClass().HelloWorld(C)")
.RunAsync(new Globals { C = c });
var output = script.ReturnValue;
注ContinueWith
式でC
変数ならびにGlobals
でC
性であること。それはトリックを行う必要があります。
var f =
CSharpScript.Create(
code: code,
options: ScriptOptions.Default.WithReferences(metadata),
globalsType: typeof(Globals))
.ContinueWith("new TestClass().HelloWorld(C)")
.CreateDelegate();
var output = await f(new Globals { C = c });
オプション3:あなたはスクリプトを複数回コールするつもりなら、それはデリゲートを作成する意味がありますあなたの場合は
オプション2
あなたのケースではあなたも、任意のGlobals
var f =
await CSharpScript.Create(
code: code,
options: ScriptOptions.Default.WithReferences(metadata))
.ContinueWith<Func<MyClass, bool>>("new TestClass().HelloWorld")
.CreateDelegate()
.Invoke();
var output = f(c);
+0
すべてのオプションが期待通りに機能する素晴らしい答えです。これらの例は、Roslynで可能なことを示し、サンプルに含める必要があります。 –
関連する問題
- 1. C#からLuaスクリプトにオブジェクトを渡す
- 2. mysqlスクリプトに数値を渡すには
- 3. perlスクリプトに引数を渡すには
- 4. JSONオブジェクトをPHPからjavascriptに同じスクリプトで渡します
- 5. phpオブジェクトをmagentoの異なるスクリプトに渡す
- 6. コントローラのjQueryスクリプトにオブジェクトの配列を渡す方法
- 7. Outlookスクリプトにパラメータを渡す
- 8. ファイルパスをPHPスクリプトに渡す
- 9. パスワードをスクリプトに渡す
- 10. $ _GETをスクリプトに渡す(AJAX)
- 11. mysql:pwdをsqlスクリプトに渡す
- 12. jsonオブジェクトをブートストラップテーブルに渡すには?
- 13. Angularオブジェクトをpug mixinに渡すには?
- 14. ライブラリクラスやオブジェクトをフラグメントに渡すには?
- 15. オブジェクトをTemplateViewに渡すには?
- 16. オブジェクトのリストをサーバに渡すには?
- 17. オブジェクトを部分的に渡すには?
- 18. オブジェクトのメソッドにデータフレームを渡すには?
- 19. クロムエクステンションに渡すオブジェクト
- 20. "ネイティブ"オブジェクトをバックグラウンドジョブに渡す
- 21. jqueryオブジェクトをMVCに渡す
- 22. 値オブジェクトをエンティティメソッドに渡す
- 23. オブジェクトをコンポーネントに渡す
- 24. パラメータをXMLHttpRequestオブジェクトに渡す
- 25. SQLAlchemy:オブジェクトにパラメータを渡す
- 26. オブジェクトをルータに渡す
- 27. コントローラにJSONオブジェクトを渡す
- 28. オブジェクトをプロセスPythonに渡す
- 29. $ userオブジェクトをテンプレートファイルに渡す
- 30. バンドルにオブジェクトを渡す - ClassNotFoundException
は、文書読み取り渡す必要はありません。https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples – Tommy
をしかし、あなたが必要とするようですコンパイラは、スクリプトエンジンではなくクラスをコンパイルして、いくつかのコードを実行します。 'CSharpSyntaxTree.ParseText'を使用してください:http://www.tugberkugurlu.com/archive/compiling-c-sharp-code-into-memory-and-executing-it-with-roslyn – Tommy
@Tommyサンプルは、私の場合、サンプルには表示されないメソッドにパラメータを渡したいと考えています。 ParseTextは興味深いようですが、コードを実行する前に一時的なアセンブリを作成したくありません。 –