Visual studio 为什么';使用Visual Studio 2017构建解决方案时,t Directory.Build.props是否有效?

Visual studio 为什么';使用Visual Studio 2017构建解决方案时,t Directory.Build.props是否有效?,visual-studio,msbuild,Visual Studio,Msbuild,我有一个Directory.Build.props文件,它与.sln文件位于同一目录中 <Project> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DocumentationFile>bin\Debug\$(MSBuildProjectName).xml</DocumentationFile> </PropertyGr

我有一个Directory.Build.props文件,它与.sln文件位于同一目录中

 <Project>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <DocumentationFile>bin\Debug\$(MSBuildProjectName).xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DocumentationFile>bin\Release\$(MSBuildProjectName).xml</DocumentationFile>
</PropertyGroup>
</Project>

bin\Debug\$(MSBuildProjectName).xml
bin\Release\$(MSBuildProjectName).xml
当我使用MSBuild构建解决方案时,我能够正确地生成XML文件。但是,在VisualStudio中使用Build->Rebuild解决方案任务不会生成XML文件


Visual Studio 2017构建和使用Directory.Build.props与MSbuild的方式是否存在差异

我已经添加了directory.build.props作为解决方案项。这在某种程度上阻止了VisualStudio在构建过程中使用它。一旦我将其作为一个解决方案项删除,它就可以正常工作。

您可能还必须删除您的.vs目录(或部分目录),因为它似乎也缓存在那里


您需要检查项目文件是否包含文件开头的下一行

<?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')" />


没有行导入“魔法”不会发生。因此,您需要将此行插入到所有旧项目中

是否重新打开了visual studio?目前,至少需要关闭解决方案并重新打开它。对于旧的项目系统(非.net核心/标准项目),您甚至可能需要在更改文件时执行此操作。感谢在此处共享您的解决方案,您可以将其作为一个答案。这对阅读此线程的其他社区成员可能是有益的,我们可以关闭此线程,谢谢。@LeoLiu MSFT:您有什么解释为什么会发生这种情况吗?这听起来像个bug。这对我来说很有效,但是我将在下一次构建中监视我的项目。否则我需要应用@Samlam的答案这对我来说也很有效。我对新旧样式的csprojs都有一个解决方案,旧的csprojs没有从
目录.Build.targets
文件中获取属性,即使SDK样式的csprojs工作正常。一旦我关闭了VS,删除了
.VS
文件夹并再次加载,它就开始按预期工作。