【发布时间】: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