我在一个文件夹中创建了一个.NET 4.0项目程序集,并在同一个文件夹中创建了一个.NET Standard项目文件(以共享相同的.cs
文件)。它完美地工作,直到我添加一个Directory.Build.props
文件,此时我只在.NET 4.0项目上收到此错误:
您的项目未引用“.NETFramework,Version = v4.0”框架。在项目文件的“TargetFrameworks”属性中添加对“.NETFramework,Version = v4.0”的引用,然后重新运行NuGet还原。
我尝试了一个只有project元素的文件:
<?xml version="1.0" encoding="utf-8"?>
<Project>
</Project>
另外
<Project Condition='$(MSBuildProjectName.Contains("-Standard"))'>
我犯了同样的错误。
我已经知道一个解决方案是创建一个共享项目并以这种方式包含文件,或添加链接文件,但我想看看我是否只能在同一文件夹中使用Directory.Build.props
for .Net Standard项目来更改一些NET标准 - 仅限配置。如果不是,我将不得不将项目拆分为单独的文件夹(这只是一个真正的实验,看看是否可能)。
Directory.Build.props
用于Net Standard项目的原因是因为我无法使用.csproj
文件来更改输出目录而不会出现错误。
显然这确实有效。我关闭了Visual Studio,删除了所有obj
和bin
文件夹,包括父目录中的.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标准项目中的任何后缀,否则将计算出新的条件。
我发现它失败的原因是因为这个文件:
obj\project.assets.json
它是在.Net Core构建在同一目录中时创建的。在更改obj
目录名之前,它必须留在那里。
经过更多的研究后我发现了这一点,其中一篇帖子似乎与我上面做的一样(我在找到下面的页面之前自己想出来):https://github.com/NuGet/Home/issues/5126#issuecomment-297457667