2015-01-06 25 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..."); 

它不thow一个错误,它只表示Completed Solution build...\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

相关问题