我的解决方案中有多个项目,它们都安装了相同的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>
谢谢
答案 0 :(得分:0)
有人可以解释为什么仅在第一个项目中会发生这种情况吗?我可以以某种方式强制安装此NuGet的解决方案中的每个项目都包括这些行吗?
没有安装nuget软件包日志,我无法给出为什么只在第一个项目中发生的原因。但是,当通过“ Manage Nuget Packages for Solution
”选项安装NuGet软件包时,应确保已将nuget软件包安装到所有项目中:
如果选中了所有复选框,则仍然存在此问题,应将该软件包单独安装到有问题的项目中,然后检查安装日志。
以防万一,有解决此问题的方法。您可以在解决方案所在的文件夹中创建一个名为“ Directory.Build.props”的MSBuild项目文件,其中包含您的内容。 它将被原始导入到目录层次结构中的所有项目中。
检查this document了解更多详细信息。
希望这会有所帮助。
答案 1 :(得分:0)
据我所知,项目的顺序似乎不是问题。 仅当生成文件夹的目标(net46)文件夹中没有文件时,才会出现此问题。
将随机文件放入.NET目标文件夹后,.targets文件将导入到项目中。或者,如果我从内部版本中删除了所有.NET目标文件夹,它将照常运行。
所以仅作总结。