【问题标题】:NuGet only imports my .targets file into the top projectNuGet 仅将我的 .targets 文件导入顶级项目
【发布时间】:2018-09-27 11:42:23
【问题描述】:

我的解决方案中有多个项目,它们都安装了相同的 NuGet 包。我通过菜单中的“管理解决方案的 Nuget 包”选项安装了这个 NuGet 包。

现在这个特定的 NuGet 包在我的构建文件夹中有一个 .targets 文件,该文件将一些文件导入到构建中。

当我重建我的解决方案时,这些文件只会为顶级项目复制。其他项目不会将文件复制到其构建文件夹中。这让我很头疼,因为所有项目都需要它们的构建文件夹中的这些文件。

当我查看我的 .csproject 文件时,我发现以下区别:

项目 1

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="..\packages\NuGetTester.1.0.1\build\NuGetTester.targets" Condition="Exists('..\packages\NuGetTester.1.0.1\build\NuGetTester.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\NuGetTester.1.0.1\build\NuGetTester.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NuGetTester.1.0.1\build\NuGetTester.targets'))" />
  </Target>
</Project>

项目 2 第二个项目没有这些行。

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

当我在第二个项目中包含这些行时,一切似乎都正常。 有人可以解释为什么这只发生在第一个项目上吗?我能否以某种方式强制安装此 NuGet 的解决方案中的每个项目也包含这些行?我不能强迫我的用户手动添加它。

编辑,这是 .targets 文件。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Content Include="$(MSBuildThisFileDirectory)\Versions\*.sql">
      <Link>App_Data\Versions\%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

谢谢

【问题讨论】:

  • 您解决了这个问题吗?你这边有关于这个问题的更新吗?
  • @JackZhai-MSFT 我回答了我自己的问题。顺序并不重要。这似乎是一个奇怪的错误。

标签: visual-studio msbuild nuget nuget-package-restore


【解决方案1】:

有人能解释一下为什么这只发生在第一个项目上吗?我能否以某种方式强制安装此 NuGet 的解决方案中的每个项目也包含这些行?

如果没有安装 nuget 包日志,我无法给出为什么这只发生在第一个项目中的原因。但是,当您通过“Manage Nuget Packages for Solution”选项安装 NuGet 包时,应确保已将 nuget 包安装到所有项目:

如果所有复选框都被选中,你仍然有这个问题,你应该单独安装那个包到有问题的项目,然后检查安装日志。

以防万一,有解决此问题的方法。您可以在与您的解决方案相同的文件夹中创建一个名为“Directory.Build.props”的 MSBuild 项目文件,其中包含您的内容。 它将被原始导入到目录层次结构中的所有项目中。

查看this document了解更多详情。

希望这会有所帮助。

【讨论】:

  • 感谢您的评论,但这似乎是一个完全不同的问题。我在回答中解释了。
【解决方案2】:

据我所知,项目的顺序似乎不是问题。 仅当构建文件夹中的目标(net46)文件夹中没有文件时才会出现此问题。

一旦我将一个随机文件放入 .NET 目标文件夹中,.targets 文件就被导入到项目中。或者,如果我从构建中删除了所有 .NET 目标文件夹,它会照常工作。

所以只是做一个总结。

  • 构建没有 .NET 框架目标文件夹的文件夹 -> 可以工作
  • 使用空的 .NET 框架目标文件夹构建文件夹 -> 不起作用
  • 构建文件夹,其中包含一个或多个文件的 .NET 框架目标文件夹 -> 它可以工作

【讨论】:

    猜你喜欢
    • 2019-03-04
    • 2022-01-19
    • 2022-11-27
    • 2013-06-13
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多