是否可以在同一文件夹中的Net Full和Net Standard项目之间共享`Directory.Build.props`?

时间:2019-03-08 01:00:15

标签: msbuild .net-standard-2.0

我在一个文件夹中创建了一个.NET 4.0项目程序集,并且还在同一文件夹中创建了一个.NET Standard项目文件(以共享相同的.cs文件)。直到我添加一个Directory.Build.props文件,该文件才能正常工作,这时,我仅在.NET 4.0项目上收到此错误:

  

您的项目未引用“ .NETFramework,Version = v4.0”   框架。在其中添加对“ .NETFramework,Version = v4.0”的引用   项目文件的“ TargetFrameworks”属性,然后重新运行NuGet   恢复。

我尝试了一个仅包含项目元素的文件:

<?xml version="1.0" encoding="utf-8"?>
<Project>
</Project>

<Project Condition='$(MSBuildProjectName.Contains("-Standard"))'>

我遇到同样的错误。

我已经知道一种解决方案是创建一个共享项目并以这种方式包括文件或添加链接文件,但是我想看看是否可以将Directory.Build.props仅用于同一文件夹中的.Net Standard项目。更改某些NET Standard-Only配置。如果没有,我将不得不将项目拆分到单独的文件夹中(这实际上只是一个实验,看是否可行)。

使用Net Standard项目进行Directory.Build.props的原因是因为我无法使用.csproj文件来正确地更改输出目录。

1 个答案:

答案 0 :(得分:0)

显然,这确实有效。我关闭了Visual Studio,删除了所有objbin文件夹,包括父目录中的.vs文件夹,然后重新启动Visual Studio。我将其添加到Directory.Build.props文件中,因此它仅适用于名称为-Standard的NET Standard项目:

<?xml version="1.0" encoding="utf-8"?>
<Project>
  <PropertyGroup Condition='$(MSBuildProjectName.Contains("-Standard"))'>
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)\obj_std\</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>

注意: :如果使用此方法,则必须将-Standard更改为添加到.Net Standard项目中的任何后缀,否则可以正常工作出现新情况。

我发现失败的原因是由于该文件:

obj\project.assets.json

.Net Core构建在同一目录中时创建。在我更改obj目录名称之前,它一定已经留在那里了。

经过更多的研究,我发现了这一点,其中的一篇帖子似乎做着我上面所做的相同的事情(在找到下面的页面之前,我自己想出了这一点): https://github.com/NuGet/Home/issues/5126#issuecomment-297457667