2015-01-06 2 views
2

C#으로 .sln을 빌드하려고합니다. 다음 코드가 있습니다.C#에서 실행 파일로 .sln 빌드하기

try 
{ 
    Console.WriteLine("Building Solution...\n"); 
    string projectFileName = Directory.GetCurrentDirectory() + "\\build\\Solution.sln"; 
    ProjectCollection pc = new ProjectCollection(); 
    Dictionary<string, string> GlobalProperty = new Dictionary<string, string>(); 
    GlobalProperty.Add("Configuration", "Release"); 
    GlobalProperty.Add("Platform", "x86"); 

    BuildRequestData BuidlRequest = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Build" }, null); 

    BuildResult buildResult = BuildManager.DefaultBuildManager.Build(new BuildParameters(pc), BuidlRequest); 

catch (Exception e) 
{ 
    Console.Write("Error:" + e.Message); 
    Console.ReadLine(); 
} 
Console.WriteLine("Completed Solution build...\nPress any key to continue..."); 

그것은 Completed Solution build...을 보여 않는 오류를 thow하지 않습니다하지만 난 \bin\Release에서 실행 파일을 찾을 수 없습니다. 내가 무언가를 잊어 버렸거나 어떻게 확인할 수 있습니까?

+0

해결책이 x86 플랫폼을 정의합니까? 기본적으로 Visual C# 프로젝트는 보통 '모든 CPU'만 정의합니다. – heavyd

+0

당신은 명시적일 수 있습니다 :'GlobalProperty.Add ("OutputPath", Directory.GetCurrentDirectory() + "\\ MyOutput"),' – Belogix

+0

'모든 CPU'와'GlobalProperty.Add ("OutputPath", Directory.GetCurrentDirectory() + "\\ build \\ Solution \\ bin \\ Release");은 차이가 없었습니다. – Alex

답변

5

코드를 제대로 작동시키지 못했지만 솔루션에서 오류가있는 코드를 작성하지 않았습니다. 어쨌든 이것이 해결책입니다.

string projectFileName = Directory.GetCurrentDirectory() + "\\build\\Solution.sln"; 
ProjectCollection pc = new ProjectCollection(); 
Dictionary<string, string> GlobalProperty = new Dictionary<string, string>(); 
GlobalProperty.Add("Configuration", "Release"); 
GlobalProperty.Add("Platform", "Any CPU"); 
GlobalProperty.Add("OutputPath", Directory.GetCurrentDirectory() + "\\build\\\bin\\Release"); 

BuildParameters bp = new BuildParameters(pc); 
bp.Loggers = new[] { 
    new FileLogger 
    { 
    Verbosity = LoggerVerbosity.Detailed, 
    ShowSummary = true, 
    SkipProjectStartedText = true 
    } 
}; 

BuildManager.DefaultBuildManager.BeginBuild(bp); 

BuildRequestData BuildRequest = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Build" }, null); 

BuildSubmission BuildSubmission = BuildManager.DefaultBuildManager.PendBuildRequest(BuildRequest); 
BuildSubmission.Execute(); 
BuildManager.DefaultBuildManager.EndBuild(); 
if (BuildSubmission.BuildResult.OverallResult == BuildResultCode.Failure) 
    { 
    throw new Exception(); 
    } 
} 
+0

내가 생각했던 것에 따라! 다행히도 문제를 추적하고 다른 모든 것이 실패하면 ... 로그인하십시오! :-) – Belogix

+0

안녕하세요, 알렉스, 개별 프로젝트의 매개 변수를 어떻게 변경할 수 있는지 알고 계십니까? globalProperty를 사용하여 AssemblyName을 변경할 수 있지만 sln의 모든 프로젝트를 덮어 씁니다. – tofutim