午觉 发表于 2024-1-4 13:59:10

Nuget 输出资源文件

组件经常有一些文件/环境依赖,提升内聚,可以将文件(exe、dll等)放在到Nuget包内自动输出、启动相应的环境
通过csproj文件配置,Nuget包自动输出到编译目录下。
https://img2024.cnblogs.com/blog/685541/202401/685541-20240103144149201-527261151.png
如上图,vcomp140d.dll是Nuget包内的文件。项目NugetContentFilesDemo引用NugetContentFiles包后,编译时能在输出目录下自动生成vcomp140d.dll文件。
方案一 通过ContentFiles输出

设置文件属性为生成内容、复制输出到目录 ,再补充PackageCopyToOutput属性
1   2         3             PreserveNewest4             true5         6   属性解读:

[*]CopyToOutputDirectory,在项目NugetContentFilesDemo通过项目方式引用时,能编译输出vcomp140d.dll文件
[*]PackageCopyToOutput,在项目NugetContentFilesDemo通过Nuget方式引用时,能自动编译输出vcomp140d.dll文件
Content,默认是输出到content;contentFiles下。
https://img2024.cnblogs.com/blog/685541/202401/685541-20240103145209268-1943990732.png
再看nuspec,有下面一行配置,会将contentFiles下的vcomp140d.dll文件复制到输出目录。
https://img2024.cnblogs.com/blog/685541/202401/685541-20240103145436132-952412817.png
然后NugetContentFilesDemo引用此Nuget包,编译下就能看到自动输出的文件。
vcomp140d.dll文件是自动输出了。但Nuget项目编译时,会有警告:“dll文件,请移动到lib文件夹”
https://img2024.cnblogs.com/blog/685541/202401/685541-20240103145906032-1035191043.png
 这是啥意思呢?按官方NuGet 警告 NU5100 | Microsoft Learn,dll文件需要放在lib文件夹下,才符合Nuget包结构及规范。
有个属性NoPackageAnalysis,
true
设置后可以跳过检查、规避相应的警告。但这样总有风险,Nuget包真有问题后面也不会有警告了。
另外,输出到lib文件夹确实是合理的,现在content以及contentFiles俩处文件夹,都有vcomp140d.dll文件,导致Nuget包大了点。都是有追求的程序员,能解决咱们一定要找办法
方案二 通过Lib文件夹输出

使用Pack打包并通过PackagePath,添加文件到Nuget包指定位置
1
页: [1]
查看完整版本: Nuget 输出资源文件