【问题标题】:How to share source code via NuGet packages for use in .NET Core projects如何通过 NuGet 包共享源代码以用于 .NET Core 项目
【发布时间】: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 等)中的 &lt;PackageReference/&gt; 节点尝试了不同的设置,但没有成功。

这意味着可能吗?如果有,应该怎么做?


背景:
这样做的原因是某种菱形问题,我们有项目 B 和 C 都使用辅助类 A,而第三个项目 D 使用 B 和 C。 在这种情况下,当在 B 和 C 中使用不同(不兼容)版本的 A 时,我不想处理程序集版本冲突。

【问题讨论】:

    标签: c# visual-studio .net-core nuget csproj


    【解决方案1】:

    这意味着可能吗?如果有,应该怎么做?

    答案是肯定的。由于您测试项目类型是.net core。您应该使用contentFiles 而不是contentcontent 用于 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\&lt;UserName&gt;\.nuget\packages文件夹中此包的nuget缓存,否则,它总是安装旧包。

    使用此方法,源文件将包含到您的项目中。

    希望这会有所帮助。

    【讨论】:

    • 非常感谢。我错过了元数据部分中的&lt;contentFiles&gt; 节点。
    • 如果用户编辑文件,这会影响使用该包的其他项目。当包更新时,编辑就会消失。我不确定这个功能是否设计得很好。有没有办法从解决方案资源管理器中隐藏文件,或将其设为只读?
    • ...啊哈,显然文件应该是只读的,并且可以编辑它们是a bug
    • 当我这样做时,文件夹最终被深埋在 obj 文件夹中 - 如何避免这种情况?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多