- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我在主项目中编译了如下代码串。但是我想在 CustomClass 中实现一个接口(interface)。该接口(interface)位于我的解决方案中的另一个项目中(我的主要项目中的部分引用)当我这样做时
公共(public)类 CustomClass : InterfaceType
我收到这样的错误。我如何才能引用其他项目,以便在我的动态代码中使用该接口(interface)和属于它的其他类?
c:\Users\xxx\AppData\Local\Temp\m8ed4ow-.0.cs(1,32: error CS0246: 找不到类型或命名空间名称“InterfaceType”(您是否缺少使用指令或程序集引用?)
string code2 =
" public class CustomClass : InterfaceType " +
" {" +
" }";
// Compiler and CompilerParameters
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters compParameters = new CompilerParameters();
compParameters.GenerateInMemory = false; //default
//compParameters.TempFiles = new TempFileCollection(Environment.GetEnvironmentVariable("TEMP"), true);
compParameters.IncludeDebugInformation = true;
//compParameters.TempFiles.KeepFiles = true;
compParameters.ReferencedAssemblies.Add("System.dll");
CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
// Compile the code
CompilerResults res = codeProvider.CompileAssemblyFromSource(compParameters, code2);
// Check the compiler results for errors
StringWriter sw = new StringWriter();
foreach (CompilerError ce in res.Errors)
{
if (ce.IsWarning) continue;
sw.WriteLine("{0}({1},{2}: error {3}: {4}", ce.FileName, ce.Line, ce.Column, ce.ErrorNumber, ce.ErrorText);
}
string error = sw.ToString();
sw.Close();
// Create a new instance of the class 'CustomClass'
object myClass = res.CompiledAssembly.CreateInstance("CustomClass");
最佳答案
底线是您需要将其他项目添加到您的 CompilerParameters.ReferencedAssemblies 集合中。这可能很棘手,因为 CodeDOM 需要能够访问程序集,因此程序集需要位于 GAC 中,或者您需要将程序集的完整路径添加到 ReferencedAssemblies 位置。
如果您在执行 CodeDOM 编译器的项目中引用包含“InterfaceType”的项目,一个简单的方法是执行如下操作:compilerParameters.ReferencedAssemblies.Add(typeof(InterfaceType ).Assembly.Location);
.如果没有,您将不得不想出一些其他方法来确保 CodeDOM 可以找到您要引用的程序集。
关于c# - 如何将另一个项目(程序集)从我的解决方案添加到 CompilerParameters.ReferencedAssemblies 集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424751/
我正在开发一个 ASP.Net C# 应用程序,用户可以在其中动态编译一段代码。在这种情况下,我使用的是 CSharpCodeProvider。 我刚刚遇到的问题是 CompilerParameter
现在我正在做一个项目,团队想要一种无需重新编译整个项目即可编写和编辑代码的方法,因此我决定尝试实现一个脚本引擎。 之前将 Lua 实现到 C++ 中,我并不是一个将脚本功能实现到项目中的新手。但是,我
我正在使用 RazorEngine解析应用程序中的 html 模板,并正在编写一些 NUnit 测试来分析性能区域并调查潜在问题。似乎在指定 GenerateInMemory = false 时,我的
我有一个 CompilerParameters 对象,我用它来提供一个 Microsoft.CSharp.CSharpCodeProvider 对象和一个派生自该对象的 ICodeCompiler 对
假设我在主项目中编译了如下代码串。但是我想在 CustomClass 中实现一个接口(interface)。该接口(interface)位于我的解决方案中的另一个项目中(我的主要项目中的部分引用)当我
我正在运行时编译动态程序集。它需要引用另一个 dll。一切正常,只要我在 CompilerParameters 中设置 OutputAssembly。但是一旦我设置 GenerateInMemory
我想在 Silverlight 中创建数学表达式评估器。 为了轻松做到这一点,我需要使用 System.Reflection、System.Reflection.Emit、System.CodeDom
我在 Windows 服务中运行了以下代码,即使在高并发性下也可以正常工作多年: CSharpCodeProvider codeProvider = new CSharpCodeProvider();
我正在使用 CodeDomProvider 类在运行时编译类。这适用于仅使用 System 命名空间的类: using System; public class Test { public S
我是一名优秀的程序员,十分优秀!