2012-11-15 1 views
2

Codedom을 사용하는 응용 프로그램에서 안전하지 않은 코드를 컴파일하려고하지만 "/ unsafe"를 사용해야한다는 오류가 발생할 때마다 나는이 문제를 봤는데 추가했습니다 :Codedom에서 안전하지 않은 코드로 프로그램 작성

Parameters.CompilerOptions = "/unsafe"; 

내 코드 워드 코드. 이것에 대한 간단한 해결책이 있습니까?

편집 : 아직 명확하지 않은 경우 제 해결책이 작동하지 않았습니다.

편집 : 여기 수업이 있습니다.

 public static bool Compile(string EXE_Name, string Source) 
    { 
     var Compiler = new CSharpCodeProvider(); 
     var Parameters = new CompilerParameters 
     { 
      CompilerOptions = "/unsafe" 
     }; 
     CompilerResults cResults = default(CompilerResults); 

     Parameters.GenerateExecutable = true; 
     Parameters.OutputAssembly = EXE_Name; 
     Parameters.ReferencedAssemblies.Add(typeof(System.Xml.Linq.Extensions).Assembly.Location); 
     Parameters.ReferencedAssemblies.Add("System.dll"); 
     Parameters.ReferencedAssemblies.Add("System.Core.dll"); 
     Parameters.ReferencedAssemblies.Add("System.Data.dll"); 
     Parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll"); 
     Parameters.ReferencedAssemblies.Add("System.Deployment.dll"); 
     Parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); 
     Parameters.ReferencedAssemblies.Add("System.Drawing.dll"); 
     Parameters.ReferencedAssemblies.Add("System.Xml.dll"); 

     Parameters.CompilerOptions = " /target:winexe"; 
     Parameters.TreatWarningsAsErrors = false; 

     cResults = Compiler.CompileAssemblyFromSource(Parameters, Source); 

     if (cResults.Errors.Count > 0) 
     { 
      foreach (CompilerError CompilerError_loopVariable in cResults.Errors) 
      { 
       CompilerError error = CompilerError_loopVariable; 
       MessageBox.Show("Error: " + error.ErrorText, "", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      return false; 
     } 
     else if (cResults.Errors.Count == 0) 
     { 
      return true; 
     } 
     return true; 
    } 
+0

어떤 점에서 솔루션이 작동하지 않았습니까? 당신은 분명히 더 많은 정보를 얻었습니다 - 우리와 공유하십시오. –

+0

나는 단순히 컴파일러 오류가 발생했다 : "오류 : 안전하지 않은 코드는/unsafe로 컴파일하는 경우에만 나타날 수 있습니다." – user1742916

답변

2

나를 위해 작동합니다. 아마도 매개 변수를 올바르게 설정하지 않았습니까?

using System.CodeDom.Compiler; 
using Microsoft.CSharp; 

class Test 
{ 
    public static void Main(string[] args) 
    { 
     var compiler = new CSharpCodeProvider(); 
     var parameters = new CompilerParameters { 
      CompilerOptions = "/unsafe" 
     }; 
     var source = "unsafe struct Foo {}"; 
     var result = compiler.CompileAssemblyFromSource(parameters, source); 
     // No errors are shown with the above options set 
     foreach (var error in result.Errors) 
     { 
      Console.WriteLine(error); 
     } 
    } 
} 
+0

입력 해 주셔서 감사합니다. 그러나 제 코드는 거의 같습니다. 몇 가지 조작을 시도했지만 여전히 동일한 오류가 발생합니다. – user1742916

+0

@ user1742916 : * 주어진 정확한 코드를 실행할 때 어떤 일이 발생합니까? 그것이 당신의 상자에서 실패한다면 어쩌면 그것은 버전 문제 일 것입니다. * 실패하지 않는다면, 분명히 "꽤 많이 똑같은"것이 충분히 가깝지는 않지만 ... 코드를 보지 않고도 나는 당신을 도울 수 없습니다. –

+0

죄송합니다. Jon. 나는 대부분의 사람들이 볼 수있는 것처럼 내 코드에서 매우 바보 같은 실수를 저질 렀다. 나중에 출력을 exe로 만들기 위해 CompilerOptions를 변경하고 + =를 사용하지 않았습니다. – user1742916

0
var Parameters = new CompilerParameters 
    { 
     CompilerOptions = "/unsafe" 
    }; 

이상 :

Parameters.CompilerOptions = " /target:winexe"; 

그냥 교체와 "/ 안전하지 않은" "/ 대상 : winexe를". 용도 :

Parameters.CompilerOptions += " /target:winexe"; 
관련 문제