0

我正在尝试在 ac# .net 应用程序中执行一些任意的 c sharp 脚本,但我尝试了多种方法来添加程序集的外部文件引用,但它似乎永远不会抱怨我错过了程序集。代码如下:

        var globals = new Globals();
        globals.mventry = myCurrentmventry;
        ScriptState state = null;
        var scriptOptions = ScriptOptions.Default;

        //all the ways I have tried
        var metadata = MetadataReference.CreateFromFile(typeof(MVEntry).Assembly.Location);
        scriptOptions.AddReferences(metadata);     
        scriptOptions.AddReferences(@"\\path\to\Microsoft.MetadirectoryServicesEx.dll");
        scriptOptions.AddReferences(Assembly.GetAssembly(typeof(MVEntry)));       
        CSharpScript.RunAsync(@"string result;
                                if(mventry[""attribute""].Value ==""value"")
                                {result = ""yes"";}
                                else
                                {result = ""no"";}", scriptOptions)
                               .ContinueWith(s => state = s.Result).Wait();
        string result = state.Variables[0].Value.ToString();
        //Also tried this way for fun
        // string result CSharpScript.EvaluateAsync(@"mventry[""attribute""].Value", 
                                scriptOptions,globals);
    }

// 我的全局类

    public class Globals
    {
        public MVEntry mventry;
    }

无论我如何添加引用或尝试执行我得到的脚本:

Microsoft.CodeAnalysis.Scripting.CompilationErrorException:(1,1):错误 CS0012:类型“MVEntry”在未引用的程序集中定义。您必须添加对程序集 'Microsoft.MetadirectoryServicesEx, Version=4.1.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 的引用

我可能正在做一些明显错误的事情,但我只是看不到它,事实上,当我观看 scriptOptions 变量时,似乎没有任何元数据元素。任何帮助将不胜感激。

4

1 回答 1

0

好的,事实证明,当您声明您需要在该点添加选项的选项类型时,它必须在声明后才能读取,否则我正在做一些根本错误的事情。无论如何,这对我有用:

var scriptOptions = ScriptOptions.Default
                    .AddReferences(Assembly.GetAssembly(typeof(MVEntry)))
                    .AddImports(Microsoft.MetadirectoryServices);

I added the directives also...it might help someone!
于 2020-07-08T11:13:16.317 回答