我正在尝试从Nuget包中提取内容文件到引用我的包的项目中。
Packages.config项目使用内容文件夹
Project.json / PackageReference / NETCore SDK项目使用contentFiles文件夹
很好,我创建了一个.NET Core 2.1控制台应用程序项目,并关注了NuGet ContentFiles Demystified博客文章,该文章写于2016年project.json
时,但今天仍然可以使用。
我在c:\dev\ContentFilesExample\contentFiles\any\any\images\dnf.png
创建了一个图像,然后创建了c:\dev\ContentFilesExample\ContentFilesExample.nuspec
文件并复制粘贴了内容:
<?xml version="1.0"?>
<package>
<metadata minClientVersion="3.3.0">
<id>ContentFilesExample</id>
<version>1.0.0</version>
<authors>nuget</authors> <!-- The NuGet team authored this package -->
<owners>nuget</owners> <!-- The NuGet team owns this package -->
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>A content v2 example package.</description>
<tags>contentv2 contentFiles</tags>
<!-- Build actions for items in the contentFiles folder -->
<contentFiles>
<!-- Include Assets as Content -->
<files include="**/images/*.*" buildAction="EmbeddedResource" />
</contentFiles>
</metadata>
</package>
然后我用命令nuget pack ContentFilesExample.nuspec
生成了Nuget程序包,并使用Nuget Package Explorer打开了它
太棒了,我的照片在那里。
现在是最后一个无效步骤。我在.NET Core 2.1项目中安装了此Nuget程序包,但是缺少该映像。在项目的根目录中,obj
文件夹和bin
文件夹中都没有图像的踪迹。
我试图关闭并重新打开Visual Studio,如某处的一些评论中所述,但这并不能解决问题。
我还尝试将.NET Core项目样式更改为PackageReference
,但这仍然不能解决问题
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ContentFilesExample" Version="1.0.0" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
那我做错了什么? .net Core是否真的支持Nuget包中的内容文件?
谢谢
答案 0 :(得分:4)
经过数小时的谷歌搜索以寻求解决方案后,我最终解决了这个问题,所以我决定写另一个答案来澄清问题因为 MS 文档很烂
<files>
文件中的 .nuspec
元素用于 packer。它告诉 nuget 要打包哪些文件(如果您的 nuspec 中没有 <files>
元素 - nuget 将使用目录命名约定)<contentFiles>
元素面向消费者 - 它告诉提取文件的方式和时间。target
表示 contentFiles/any/any
其中“any/any”部分告诉nuget 它适用于任何语言和任何框架。nuspec
<metadata>
...
<contentFiles>
<files include="**/myfile.cs" />
</contentFiles>
</metadata>
<files>
<file src="myfile.cs" target="contentFiles\any\any" /> <!-- this is for new format -->
<file src="myfile.cs" target="content" /> <!-- this is for the old format -->
</files>
附注。我的博文 here
中有更多详细信息答案 1 :(得分:0)