【发布时间】: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