NuGet仅将我的.targets文件导入顶级项目

时间:2018-09-27 11:42:24

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

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

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

当我重建解决方案时,这些文件仅复制给顶级项目。其他项目不会将文件复制到其构建文件夹中。这使我头疼,因为所有项目都需要在其build文件夹中使用这些文件。

当我查看.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>

谢谢

2 个答案:

答案 0 :(得分:0)

  

有人可以解释为什么仅在第一个项目中会发生这种情况吗?我可以以某种方式强制安装此NuGet的解决方案中的每个项目都包括这些行吗?

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

enter image description here

如果选中了所有复选框,则仍然存在此问题,应将该软件包单独安装到有问题的项目中,然后检查安装日志。

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

检查this document了解更多详细信息。

希望这会有所帮助。

答案 1 :(得分:0)

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

将随机文件放入.NET目标文件夹后,.targets文件将导入到项目中。或者,如果我从内部版本中删除了所有.NET目标文件夹,它将照常运行。

所以仅作总结。

  • 没有.NET Framework目标文件夹的构建文件夹->可以使用
  • 使用空的.NET Framework目标文件夹构建文件夹->不起作用
  • 使用包含一个或多个文件的.NET Framework目标文件夹构建文件夹->有效