【问题标题】:How can I reference external project DLL with ScriptOptions?如何使用 ScriptOptions 引用外部项目 DLL?
【发布时间】:2021-04-29 22:53:10
【问题描述】:

我有一个项目 A,我在其中编写要使用 C# Script 对象在内部编译的代码。

我在另一个解决方案(外部项目)项目 B 中创建了另一个项目。我已经在“引用”列表中的项目 A 中添加了对 ProjectB.DLL 的引用。我想要的是在我要编译的内部脚本代码上添加项目 B 的引用。为了更好地解释,我的代码如下:

我的“使用语句”是:

        APPROVED_USING_STATEMENTS = new HashSet<string>();
        APPROVED_USING_STATEMENTS.Add("System.Text");
        APPROVED_USING_STATEMENTS.Add("System.Data");
        APPROVED_USING_STATEMENTS.Add("System.Text.RegularExpressions");
        APPROVED_USING_STATEMENTS.Add("System");
        APPROVED_USING_STATEMENTS.Add("System.Linq");
        APPROVED_USING_STATEMENTS.Add("System.Collections");
        APPROVED_USING_STATEMENTS.Add("System.Security.Cryptography");
        APPROVED_USING_STATEMENTS.Add("Project.ProjectB");

编译代码如下:

                foreach (var apprvUsingStatements in DataTransformationScript.GetApprovedUsingStatements())
                {
                    usingStatements.Append("using " + apprvUsingStatements + "; \n");
                }
               
                string transformCode = usingStatements.ToString();
                transformCode += "object returnObject = currentData;";
                transformCode += schemaMap.transform_script;
                transformCode += ";returnObject";
                ScriptOptions references = ScriptOptions.Default.AddReferences(DataTransformationScript.GetApprovedUsingStatements());
                //Adding my own personal references from Connector
                var asm = typeof(Project.ProjectB.TestTransformation).Assembly;
                references.AddReferences(asm);
                //HTMLEncodeLogMessage.Info(Logger, "Assmebly added: " + asm.FullName + " Location " + asm.Location + " Given Name " + asm.GetName().Name);
                //===============================================//
                var transformScript = CSharpScript.Create(transformCode, references, globalsType: typeof(DataTransformationScript.Globals));
                transformScript.Compile();

如您所见,我使用以下代码提取添加对项目 B 的引用:

            var asm = typeof(Project.ProjectB.TestTransformation).Assembly;
            references.AddReferences(asm);

并且我已经将上面的项目使用语句作为“使用 Project.ProjectB”。 (TestTransformation 只是 ProjectB 中的一个方法。看来我还必须使用方法名称来获取引用 dll。

我仍然收到错误:找不到类型或命名空间名称“Project”(您是否缺少 using 指令或程序集引用?)。

我是否缺少需要添加的任何其他类型的参考?我注意到对于我拥有的所有“系统”引用,我都没有收到此错误。 C# Script 对象是否可能只从 C:\Windows\assembly 内的文件夹中获取数据?

我查看了以下 stackoverflow 问题,但没有解决我的问题: Link

我非常感谢任何形式的指导和帮助。我还在学习。

【问题讨论】:

  • 根据我的测试,我没有遇到错误。如果代码 transformScript.Compile();正常运行,程序会发生什么?
  • 我运行以下命令: ScriptValidator scriptValidator = new ScriptValidator(transformScript);编译代码后,我收到错误:找不到类型或命名空间名称“项目”(您是否缺少 using 指令或程序集引用?)。

标签: c# .net visual-studio .net-assembly


【解决方案1】:

尝试使用 costura fody/fody 库

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多