C# 始终从Microsoft.Build库获取BuildResultCode.Failure

C# 始终从Microsoft.Build库获取BuildResultCode.Failure,c#,.net,msbuild,visual-studio-2017,C#,.net,Msbuild,Visual Studio 2017,最近,我使用VS2017以编程方式构建C#项目。然而,我总是得到BuildResultCode.Failure。不知道为什么,需要帮助,谢谢。 这是我的密码: string projectFileName = @"C:\Downloads\ToBeBuilt\ToBeBuilt\ToBeBuilt.csproj"; ProjectCollection pc = new ProjectCollection(); pc.SetGlobalProperty("Configuration", "Deb

最近,我使用VS2017以编程方式构建C#项目。然而,我总是得到
BuildResultCode.Failure
。不知道为什么,需要帮助,谢谢。 这是我的密码:

string projectFileName = @"C:\Downloads\ToBeBuilt\ToBeBuilt\ToBeBuilt.csproj";

ProjectCollection pc = new ProjectCollection();
pc.SetGlobalProperty("Configuration", "Debug");
pc.SetGlobalProperty("Platform", "x86");
pc.SetGlobalProperty("OutDir", @"C:\Downloads\Artifacts");

Dictionary<string, string> globalProperty = new Dictionary<string, string>();
globalProperty.Add("Configuration", "Debug");
globalProperty.Add("Platform", "x86");
globalProperty.Add("OutDir", @"C:\Downloads\Artifacts");

BuildRequestData BuidlRequest = new BuildRequestData(projectFileName, globalProperty, "15.0", new string[] { "Build" }, null);
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(new BuildParameters(pc), BuidlRequest);
BuildResultCode a = buildResult.OverallResult;
string projectFileName=@“C:\Downloads\tobebuild\tobebuild\tobebuild.csproj”;
ProjectCollection pc=新建ProjectCollection();
pc.SetGlobalProperty(“配置”、“调试”);
pc.SetGlobalProperty(“平台”、“x86”);
pc.SetGlobalProperty(“OutDir”,@“C:\Downloads\Artifacts”);
Dictionary globalProperty=新字典();
添加(“配置”、“调试”);
添加(“平台”、“x86”);
添加(“OutDir”,@“C:\Downloads\Artifacts”);
BuildRequestData BuildRequest=新的BuildRequestData(projectFileName,globalProperty,“15.0”,新字符串[]{“Build”},null);
BuildResult BuildResult=BuildManager.DefaultBuildManager.Build(新的BuildParameters(pc),buildRequest);
BuildResultCode a=buildResult.OverallResult;
以下是要建设的目标项目:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  ...
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    ...
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Target Name="Build">  
    <Csc Sources="@(Compile)"/>    
  </Target> 
</Project>

...
真的
bin\x86\Debug\
调试;痕迹
满的
x86
促使
...
始终从Microsoft.Build库获取BuildResultCode.Failure

您可以检查类似问题,以便使用提供的日志文件MSBuild进行调试:

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();
  }
}
string projectFileName=Directory.GetCurrentDirectory()+“\\build\\Solution.sln”;
ProjectCollection pc=新建ProjectCollection();
Dictionary GlobalProperty=新字典();
添加(“配置”、“发布”);
添加(“平台”、“任何CPU”);
GlobalProperty.Add(“OutputPath”,Directory.GetCurrentDirectory()+“\\build\\\bin\\Release”);
BuildParameters bp=新的BuildParameters(pc);
bp.Loggers=new[]{
新文件记录器
{
详细的,详细的,
ShowSummary=true,
SkipProjectStartedText=true
}
};
BuildManager.DefaultBuildManager.BeginBuild(bp);
BuildRequestData BuildRequest=新建BuildRequestData(projectFileName,GlobalProperty,null,新字符串[]{“Build”},null);
BuildSubmission-BuildSubmission=BuildManager.DefaultBuildManager.PendBuildRequest(BuildRequest);
BuildSubmission.Execute();
BuildManager.DefaultBuildManager.EndBuild();
if(BuildSubmission.BuildResult.OverallResult==BuildResultCode.Failure)
{
抛出新异常();
}
}

验证:

检查
buildResult.Exception
属性。这是什么?如果可能,请检查以下线程@Alex谢谢您的帮助!我应该如何标记答案?实际上,有多种原因导致构建失败。我遵循了您给出的帖子,并继续使用提供的日志文件MSBuild进行调试,最终成功了。由于失败可能有多种原因,您应该提供详细的异常消息以帮助调查,否则问题无法回答。