NuGet v4 contentFiles not getting copied to output
我在使用 NuGet v4 CLI 将文件复制到输出时遇到问题。
我的目录结构如下:
1 2 3 4 | repo repo\\CodeAnalyzer.nuspec repo\\CodeAnalyzer.props repo\\contentFiles\\any\\any\\StyleCop.ruleset |
这是我的 CodeAnalyzer.props 文件:
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <PackageName>CodeAnalyzer</PackageName> <PackageVersion>0.1.0</PackageVersion> </PropertyGroup> <PropertyGroup> <CodeAnalysisRuleSet>StyleCop.ruleset</CodeAnalysisRuleSet> </PropertyGroup> </Project> |
和CodeAnalyzer.nuspec文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>CodeAnalyzer</id> <description>Provides standard code analyzer tooling and customisation.</description> Me</authors> <version>0.1.0</version> <dependencies> <dependency id="StyleCop.Analyzers" version="1.1.118" /> </dependencies> <contentFiles> <files include="any/any/*" buildAction="Content" copyToOutput="true" flatten="false" /> </contentFiles> </metadata> <files> <file src="contentFiles\\any\\any\\StyleCop.ruleset" target="contentFiles" /> <file src="CodeAnalyzer.props" target="build" /> </files> </package> |
在 CLI 上,我使用以下方式打包:
uget.exe pack .\\CodeAnalyzer.nuspec
在生成的 .nupkg 中,有一个 contentFiles 目录,其中包含 StyleCop.ruleset 文件,这样就可以了。
如果我随后将包安装到项目中,它会很好地获取 StyleCop.Analyzers 依赖项,并查找 StyleCop.ruleset 文件,因此 .props 文件很好。
但是 StyleCop.ruleset 文件没有放在任何地方。
感觉我已经尝试了很多将 buildActions 更改为 None/Content、copyToOutput 为 true/false、contentFiles.file 元素和 file.file 元素的不同路径。
编辑:消费项目正在使用 NuGet 包的 PackageReferences,而不是 packages.config。
使用
由于
因此,
由于您使用的内容文件是构建时资产,而不是运行时资产,我建议
我遇到了这个问题,当时我进行了很多更改,但没有任何效果。最后通过使用
解决
packages.config 项目使用
PackageReference 项目使用
您可以在此处找到有关不可变内容的更多信息:
内容文件示例
nuget-contentFiles-揭秘
No content files in output directory
Content files have been copied to output directory
IDE 是 Visual Studio 2017。该项目是一个应用程序项目,这意味着它是旧的
更新答案
1 2 3 | <PackageReference Include="EO.Pdf" GeneratePathProperty="true"> <Version>19.0.83</Version> </PackageReference> |
检查您的 \\\\obj\\\\.csproj.nuget.g.props 以验证变量是否已生成
变量以 Pkg 为前缀。听起来它们是为所有带有工具文件夹的 nuget 包自动生成的。
这是解决此问题的另一个答案:
https://stackoverflow.com/a/68243917/56621
TL;DR - 将文件打包到包中时,请确保遵循目标框架/语言的"任意/任意"命名约定,否则将无法正常工作