防止在NuGet内容和contentFiles文件夹中复制文件

时间:2017-11-24 08:13:46

标签: visual-studio nuget nuget-package

我的NuGet包需要提供一些相当大的文件来构建输出目录。

在旧的NuGet模型中,此类文件必须存储在content的{​​{1}}文件夹中。在new model introduced in NuGet 3.3中,此类文件必须存储在contentFiles folder

为了保持与旧版NuGet的兼容性,主要与Package.config package management format兼容,我需要将文件复制到两个文件夹中。不幸的是,这几乎是包装尺寸的两倍。

有没有办法防止这种情况?我可以以某种方式将.nupkg链接到contentFiles文件夹吗?

2 个答案:

答案 0 :(得分:1)

如果您只想将文件输出到构建输出(content只将文件复制到输出目录但确实将其设置为复制到输出目录项),您可以使用完全不同的通过创建将包含在项目中的msbuild文件来实现。

您可以将文件 - 例如test.jpg放入tools文件夹(您也可以使用build)并向Your.Package.Id.targets添加build文件来执行此操作{1}}文件夹(名称为包裹的包ID,.targets为扩展名),其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Content Include="$(MSBuildThisFileDirectory)..\tools\test.jpg">
      <Link>test.jpg</Link>
      <Visible>false</Visible>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
  </ItemGroup>
</Project>

此目标将自动导入到项目文件中,无论哪种&#34;样式&#34;使用NuGet引用(packages.configPackageReference)并且应该向后兼容VS的旧版本,只要它们支持NuGet和ToolsVersion 4.0

Link元数据表示文件最终将在输出/发布目录中的位置。您可以将其设置为例如defaultContent\images\foo.jpg创建嵌套结构并重命名该文件。 (您甚至可以使用MSBulid变量来使用某些引用项目的配置)。 Visible元数据阻止解决方案资源管理器显示文件的完整相对路径,这可能最终会出现在许多嵌套的..节点中。 CopyToPublishDirectory适用于使用Publish目标进行发布的.NET Core / ASP.NET核心应用程序或基于SDK的项目。

请注意,您可以将Inclue - 路径设置为任何内容,具体取决于文件包中的位置。您也可以使用通配符(但随后将Link设置为%(Filename)%(Extension)

答案 1 :(得分:0)

找到了更新的文档,详细描述了此文档 MSBuild targets for NuGet

--- 8 <---

默认情况下,所有内容都会添加到包内content和contentFiles \ any \文件夹的根目录中,并保留相对文件夹结构,除非您指定包路径:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles\</PackagePath>
</Content>

如果您要将所有内容仅复制到一个特定的根文件夹(而不是同时复制content和contentFiles),则可以使用MSBuild属性ContentTargetFolders,该属性默认为“ content; contentFiles”,但可以设置为其他任何文件夹名称。请注意,仅在ContentTargetFolders中指定“ contentFiles”会根据buildAction将文件放在contentFiles \ any \或contentFiles \\下。

---> 8 ---