我的NuGet包需要提供一些相当大的文件来构建输出目录。
在旧的NuGet模型中,此类文件必须存储在content
的{{1}}文件夹中。在new model introduced in NuGet 3.3中,此类文件必须存储在contentFiles
folder。
为了保持与旧版NuGet的兼容性,主要与Package.config
package management format兼容,我需要将文件复制到两个文件夹中。不幸的是,这几乎是包装尺寸的两倍。
有没有办法防止这种情况?我可以以某种方式将.nupkg
链接到contentFiles
文件夹吗?
答案 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.config
,PackageReference
)并且应该向后兼容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 ---