【问题标题】:Building a .sln in C# executable在 C# 可执行文件中构建 .sln
【发布时间】:2015-01-06 16:13:17
【问题描述】:

我正在尝试用 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...,但我在\bin\Release 中找不到可执行文件。我是否忘记了什么或如何检查?

【问题讨论】:

  • 您的解决方案是否定义了x86 平台?默认情况下,Visual C# 项目通常只定义Any CPU
  • 你可以是明确的:GlobalProperty.Add("OutputPath", Directory.GetCurrentDirectory() + "\\MyOutput");
  • Any CPUGlobalProperty.Add("OutputPath", Directory.GetCurrentDirectory() + "\\build\\Solution\\bin\\Release"); 没有任何区别。
  • 就像,它没有构建任何东西......
  • 那么您可能需要添加一个记录器并检查实际输出:stackoverflow.com/questions/9942499/…

标签: c# msbuild microsoft.build


【解决方案1】:

我设法让它工作,由于代码中的错误,解决方案没有建立。无论如何,这是解决方案。

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();
  }
}

【讨论】:

  • 如我所想!很高兴您设法找到了问题,如果一切都失败了……记录! :-)
  • 嗨,Alex,你知道我可以如何更改单个项目中的参数吗?我可以使用 globalProperty 更改 AssemblyName,但它会覆盖 sln 中的每个项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2012-12-10
  • 2019-01-17
  • 2015-11-03
相关资源
最近更新 更多