Nuget 输出资源文件

这篇具有很好参考价值的文章主要介绍了Nuget 输出资源文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

组件经常有一些文件/环境依赖,提升内聚,可以将文件(exe、dll等)放在到Nuget包内自动输出、启动相应的环境

通过csproj文件配置,Nuget包自动输出到编译目录下。

Nuget 输出资源文件

如上图,vcomp140d.dll是Nuget包内的文件。项目NugetContentFilesDemo引用NugetContentFiles包后,编译时能在输出目录下自动生成vcomp140d.dll文件。

方案一 通过ContentFiles输出

设置文件属性为生成内容、复制输出到目录 ,再补充PackageCopyToOutput属性

1     <ItemGroup>
2         <Content Include="vcomp140d.dll">
3             <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
4             <PackageCopyToOutput>true</PackageCopyToOutput>
5         </Content>
6     </ItemGroup>

属性解读:

  • CopyToOutputDirectory,在项目NugetContentFilesDemo通过项目方式引用时,能编译输出vcomp140d.dll文件
  • PackageCopyToOutput,在项目NugetContentFilesDemo通过Nuget方式引用时,能自动编译输出vcomp140d.dll文件

Content,默认是输出到content;contentFiles下。

Nuget 输出资源文件

再看nuspec,有下面一行配置,会将contentFiles下的vcomp140d.dll文件复制到输出目录。

Nuget 输出资源文件

然后NugetContentFilesDemo引用此Nuget包,编译下就能看到自动输出的文件。

vcomp140d.dll文件是自动输出了。但Nuget项目编译时,会有警告:“dll文件,请移动到lib文件夹”

Nuget 输出资源文件

 这是啥意思呢?按官方NuGet 警告 NU5100 | Microsoft Learn,dll文件需要放在lib文件夹下,才符合Nuget包结构及规范。

有个属性NoPackageAnalysis,

<NoPackageAnalysis>true</NoPackageAnalysis>

设置后可以跳过检查、规避相应的警告。但这样总有风险,Nuget包真有问题后面也不会有警告了。

另外,输出到lib文件夹确实是合理的,现在content以及contentFiles俩处文件夹,都有vcomp140d.dll文件,导致Nuget包大了点。都是有追求的程序员,能解决咱们一定要找办法

方案二 通过Lib文件夹输出

使用Pack打包并通过PackagePath,添加文件到Nuget包指定位置

1     <<ItemGroup>
2         <None Include="vcomp140d.dll" Pack="True" PackagePath="lib\$(TargetFramework)\vcomp140d.dll" />
3     </ItemGroup>

我们看下Nuget包文件,位置是okay的

Nuget 输出资源文件

如果将它输出来,复制到引用nuget包的项目输出目录下。csproj没有一个简单的属性能配置。。。
在大佬毅仔的指导下解决了,感谢我们的MVPwalterlv。可以在Target="AfterBuild"编译后,将文件复制出来:

1     <Target Name="AfterBuildCopy" AfterTargets="AfterBuild">
2         <ItemGroup>
3             <_AfterBuildCopyFile Include="$(OutputPath)**" />
4         </ItemGroup>
5         <Copy SourceFiles="@(_AfterBuildCopyFile)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="True" />
6     </Target>

能看到输出目录下的vcomp140d.dll文件:

Nuget 输出资源文件

target属性以及build.targets文件可以做很多操作。安利下其它的target使用:在 MSBuild 编译过程中操作文件和文件夹(检查存在/创建文件夹/读写文件/移动文件/复制文件/删除文件夹) - walterlv

 

参考列表:文章来源地址https://www.toymoban.com/news/detail-774798.html

  • 将 NuGet pack 和 restore 用作 MSBuild 目标 | Microsoft Learn
  • 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) - walterlv
  • 使用 MSBuild Target 复制文件的时候如何保持文件夹结构不变 - walterlv
  • 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv

到了这里,关于Nuget 输出资源文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Figma怎么导出源文件?

    Figma 是一款备受网页和 UI 设计师喜爱的基于矢量的设计工具。那么,如何在 Figma 中导出源文件呢?本篇文章将为大家演示如何以更加简单的方式,从 Figma 快速、免费导出源文件。 即时设计 是一款拥有强大导入导出功能的设计工具,全面覆盖了 Figma 设计能力的且为全中文的

    2024年02月11日
    浏览(56)
  • VScode中添加头文件和源文件的方法

            在正常情况下,若同一文件夹下若头文件、源文件、和主要代码在同一文件夹下,则可以正常运行程序。 如图(此为Visual Studio 示例):   编译结果(无报错):     但在VScode中,同样的使用方式会产生报错。 如下:    main.c:  myheadfile.h: myheadfile.c:    报错如

    2023年04月09日
    浏览(47)
  • Visual Studio C++ 的 头文件和源文件

    在Visual Studio C++中,头文件(Header Files)和源文件(Source Files)是两种不同的文件类型,用于组织和管理C++代码。 头文件(Header Files): 后缀名为 .h 或 .hpp 的文件,例如 example.h 。 包含类、结构体、函数的声明、宏定义和类型定义等。 通常用于存放函数原型、类的声明、常

    2024年02月07日
    浏览(56)
  • CMake获取目录下所有源文件

    1、aux_source_directory指令         aux_source_directory( dir variable ) 比如:         aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} ALL_SOURCE) , 这样将当前目录所有的源文件(.cpp 和.c文件)都放到了ALL_SOURCE变量中,但是头文件并没有被包括进去,若在头文件有函数的实现部分,采用这

    2024年02月15日
    浏览(49)
  • 【C++】源文件.cpp和头文件.h分离编程

    将C++代码分为头文件(.h)和源文件(.cpp)的做法有以下几个好处: 模块化和代码组织:将函数和类的声明(包括函数原型、类的成员和属性等)放在头文件中,将函数和类的实现(具体的函数逻辑、成员函数的定义等)放在源文件中。这种分离有助于对代码进行模块化和组

    2024年02月09日
    浏览(39)
  • Linux--多个源文件编译成同一个可执行文件

    写法一:不推荐 写法二、推荐 $@: 代表目标文件    $^: 代表生成目标文件的所有源文件

    2024年02月15日
    浏览(64)
  • Vivado中如何修改IP源文件

    前一篇文章是通过改变JESD204B IP的设置,在Shared Logic里勾选in example design,来避免共用输入时钟的问题。那么还有没有别的办法呢?有没有更直接点的实现方式呢? 答案是肯定的:可以 直接修改IP,将IBUFDS从IP里移出去 ,放到外面就可以共用了。修改IP是一个比较复杂的办法,

    2024年02月11日
    浏览(87)
  • Lua之Lua源文件批量转换为luac字节码文件

    准备的工具:luac.exe  CSDN https://mp.csdn.net/mp_download/manage/download/UpDetailed Unity版:

    2024年02月11日
    浏览(40)
  • 教你怎么在电脑端下载西瓜视频源文件

    家里长辈平时爱用西瓜视频,看到喜欢的广场舞就会收藏,甚至想下载到视频机,晚上去广场跟着跳🤣。 这时计算机专业出身的我,就派上用场了。不废话,直接上手: 打开西瓜视频官网,搜索到想要的视频 打开 F12(开发者工具) 切换到移动端模式,刷新页面 在 Network

    2024年02月05日
    浏览(276)
  • 【STM32学习笔记】(5)—— STM32工程添加源文件和头文件

    STM32的工程文件构成较为复杂,同时为STM32工程文件添加源文件和头文件也是较为复杂的,下面就由此文章来介绍怎么给STM32工程添加源文件(.c)与头文件(.h),以跑马灯实验为例。 1、在Template工程文件夹下面新建一个 HARDWARE 的文件夹,用来存储以后与硬件相关的代码,然

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包