【问题标题】:Is it possible to share `Directory.Build.props` between Net Full and Net Standard projects in the same folder?是否可以在同一文件夹中的 Net Full 和 Net Standard 项目之间共享“Directory.Build.props”?
【发布时间】:2019-03-08 01:00:15
【问题描述】:

我在一个文件夹中创建了一个 .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 文件更改输出目录而不会出错。

【问题讨论】:

    标签: msbuild .net-standard-2.0


    【解决方案1】:

    显然这确实有效。我关闭了 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 标准项目的任何后缀,或者制定一个新条件。

    我发现它失败的原因是因为这个文件:

    obj\project.assets.json
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 2015-07-13
      相关资源
      最近更新 更多