C# sdk项目中的Msbuild 15引发错误:无法识别元素下的元素

C# sdk项目中的Msbuild 15引发错误:无法识别元素下的元素,c#,msbuild,visual-studio-2017,C#,Msbuild,Visual Studio 2017,在vs2017和msbuild 15中使用SDK样式的C项目中,我尝试使用以下xml片段基于条件导入项目: <Project Sdk="Microsoft.NET.Sdk"> <!--No <TargetFramework> element is defined, it's imported with Import Project element--> <Choose> <When Condit

在vs2017和msbuild 15中使用SDK样式的C项目中,我尝试使用以下xml片段基于条件导入项目:

   <Project Sdk="Microsoft.NET.Sdk">
       <!--No <TargetFramework> element is defined, it's imported with Import Project element-->

     <Choose>
        <When Condition="$(PackId) == 'xyz'">
          <!-- it has <TargetFramework> element net45 -->
          <Import Project="$(MSBuildThisFileDirectory)projectxyz.props"/>    
        </When>
        <Otherwise>
          <!-- it has <TargetFramework> element netcoreapp2.0-->
          <Import Project="$(MSBuildThisFileDirectory)projectAbc.props"/>
        </Otherwise>
      </Choose>

   </Project>
Vs2017无法加载项目,出现错误:

    error  : The element <Import> beneath element <When> is unrecognized.   
    error  : The element <Import> beneath element <Otherwise> is unrecognized.  

此代码有什么问题?

回答字面上的问题:此代码有什么问题

答案是此代码不符合MSBuild文件架构

根据,导入不允许是When或other的子级。只允许使用PropertyGroup、ItemGroup和Choose


现在,如果您真正想问的是如何有条件地导入项目,那么请发布该问题。

可能通过Choose不允许有条件导入?虽然使用条件导入语句在命令行MSBuild中工作,但它们在Visual Studio IDE中不工作,ref:@M.Hassan,新SDK样式的项目当前似乎不支持Choose元素。我现在使用的方法就像stijn所说的@Leo Liu MSFT,@stijn,每个项目都有元素。我使用了带条件的导入,但无法识别更改为TargetFramework值的错误消息。所以我不确定导入的项目是否正确加载。@Leo Liu MSFT,@stijn,我使用了导入条件,正如你所说的。我运行msbuild/t:restore,然后运行msbuild/t:build。它在命令行中运行良好。但在Vs IDE中它失败了。因此结论:1选择元素不支持导入。2使用msbuild命令行(而不是VS2017 IDE)以条件正常工作的方式导入。