首页 > 解决方案 > 在 Visual Studio 中执行“还原 Nuget 包”时未复制 Nuget 包文件

问题描述

我有一个包含一些静态文件的 nuget 包

<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
   ....
   ....
  </metadata>
  <files>
    <file src="static\css\index.css" target="content\static\css\index.css"/>
    <file src="static\js\index.js" target="content\static\js\index.js"/>
  </files>
</package>

如果我将此包安装在 Visual Studio 项目中,则文件将正确复制到项目中。但是当我从项目中手动删除这些文件并尝试恢复包时(通过解决方案的“恢复 nuget 包”选项),文件不会再次复制。

原因是包已经安装

知道如何在还原时强制复制文件吗?

标签: c#visual-studio-2017nuget

解决方案


知道如何在还原时强制复制文件吗?

正如您在回答中所描述的那样,恢复选项不支持恢复。

但是,如果您想在设计时或构建时强制恢复丢失的文件。您可以考虑在 nuget 包中包含 msbuild 道具和目标。

创建一个 PackageID.targets 文件(执行还原或复制作业)并将其放在build文件夹中。然后使用该包的任何项目都将导入该xx.targets文件。而且由于该xx.targets文件可能涉及许多内置任务,例如复制任务,移动任务......

您可能会在构建期间通过类似于以下内容恢复文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="RestoreFiles" BeforeTargets="build" Condition="!Exists('static\css\index.css') Or !Exists('static\css\index.css')">
    <Copy SourceFiles="xxx" DestinationFolder="xxx"/>
  </Target>
</Project>

另外,我曾经在一个问题中遇到过AppDynamics.Agent.Windows ,即使在设计时也可以恢复丢失的文件,你可以从这个包中得到一些提示。(下载它的 xxnupkg 并将其重命名为 xx.zip=>解压缩它)

所以恢复选项不能恢复文件,如果你强烈希望,考虑使用自定义 xx.targets 文件。


推荐阅读