0
확장 메서드 정적 클래스를 동적으로 생성 된 어셈블리에 포함하려고 노력하고 있는데, '유형'의 컴파일러 오류가 계속 발생한다는 것을 제외하고는 6 행 28 열에 'this'라는 단어가 있습니다. 'this'를 제거하면 오류가 반환되지 않습니다 (그러나 확장 메서드가 아닙니다).동적으로 생성 된 어셈블리의 확장 방법?
public static void CodeDomDooDad()
{
using (var provider = new CSharpCodeProvider())
{
var compilerParameters = new CompilerParameters();
compilerParameters.ReferencedAssemblies.Add("system.dll");
compilerParameters.CompilerOptions = "/t:library";
compilerParameters.GenerateInMemory = true;
var sb = new StringBuilder();
sb.Append("namespace MooCow \n{ \n");
sb.Append("public static class Extensions {\n");
sb.Append("public static string ToMoo(this string s) {\n");
sb.Append("return s.Replace(\" \",\"moo\");\n");
sb.Append("}\n");
sb.Append("}\n");
sb.Append("}\n");
//Console.WriteLine(sb.ToString());
var cr = provider.CompileAssemblyFromSource(compilerParameters, sb.ToString());
if (cr.Errors.Count > 0)
{
CompilerError error = cr.Errors[0];
Console.WriteLine(
"error:"+error.ErrorText +
" line:" +error.Line +
" col:" +error.Column +
" isWarning:" + error.IsWarning);
}
}
}
이것은 잘 작동하는 생성 된 코드입니다.
namespace MooCow {
public static class Extensions
{
public static string ToMoo(this string s)
{
return s.Replace(" ", "moo");
}
}
}
프레임 워크 버전이 machine.config에서 가져 오지 않았습니까? 컴파일러 버전을 가져온 생성자가 없으면 내 이해가되었습니다. – webworm
@webworm 나는 정직하게 기억할 수 없다 : / – bluevoodoo1