如何通过 NuGet 包共享源代码以用于 .NET Core 项目
Posted
技术标签:
【中文标题】如何通过 NuGet 包共享源代码以用于 .NET Core 项目【英文标题】:How to share source code via NuGet packages for use in .NET Core projects 【发布时间】:2019-03-23 15:45:12 【问题描述】:我想让小段源代码(例如帮助程序类)可用于 .NET Core 项目 (.csproj)。 至此,我根据不同的博文和官方的 nuget 文档,以多种不同的方式用 NuGet 打包了源代码。我使用了一个 nuspec 文件来控制我的源文件在 nuget 包中的最终位置,例如:
<files>
<file src="*.cs" target="content/LruCache" />
<file src="*.cs" target="contentFiles/cs/any/LruCache" />
</files>
我没有包含任何 msbuild 目标文件或安装脚本。
每当我将 NuGet 包安装到 .NET Core 项目 (https://docs.microsoft.com/en-us/dotnet/core/tools/csproj) 时,我根本就什么也得不到。我的项目中不会包含任何源文件。我为 .csproj(PrivateAssets 等)中的 <PackageReference/>
节点尝试了不同的设置,但没有成功。
这意味着可能吗?如果有,应该怎么做?
背景: 这样做的原因是某种菱形问题,我们有项目 B 和 C 都使用辅助类 A,而第三个项目 D 使用 B 和 C。 在这种情况下,当在 B 和 C 中使用不同(不兼容)版本的 A 时,我不想处理程序集版本冲突。
【问题讨论】:
【参考方案1】:这意味着可能吗?如果有,应该怎么做?
答案是肯定的。由于您测试项目类型是.net core。您应该使用contentFiles
而不是content
。 content
用于 packages.config。查看Using the contentFiles element for content files 和博客NuGet ContentFiles Demystified 了解更多详情。
所以你的.nuspec
文件应该是:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyTestCore</id>
<version>5.0.0</version>
<authors>TestContentFile</authors>
<owners>TestContentFile</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package Description</description>
<contentFiles>
<files include="any/any/Test.cs" buildAction="content" flatten="true" copyToOutput="true"/>
</contentFiles>
</metadata>
<files>
<file src="contentFiles/any/any/Test.cs" target="contentFiles/any/any/LruCache" />
</files>
</package>
nuget 包应如下所示:
注意:创建新包时,不要忘记删除C:\Users\<UserName>\.nuget\packages
文件夹中此包的nuget缓存,否则,它总是安装旧包。
使用此方法,源文件将包含到您的项目中。
希望这会有所帮助。
【讨论】:
非常感谢。我错过了元数据部分中的<contentFiles>
节点。
如果用户编辑文件,这会影响使用该包的其他项目。当包更新时,编辑就会消失。我不确定这个功能是否设计得很好。有没有办法从解决方案资源管理器中隐藏文件,或将其设为只读?
...啊哈,显然文件应该是只读的,并且可以编辑它们是a bug。
当我这样做时,文件夹最终被深埋在 obj 文件夹中 - 如何避免这种情况?以上是关于如何通过 NuGet 包共享源代码以用于 .NET Core 项目的主要内容,如果未能解决你的问题,请参考以下文章
如何创建面向 .NET 5 或更低版本的 NuGet 包。但不是 .NET 6 或更高版本
用于 ASP.NET Core 5 MVC 的 NuGet 包