【问题标题】:Packaging project reference in nuget : .net corenuget中的打包项目参考:.net core
【发布时间】:2018-05-21 20:18:23
【问题描述】:

目前我有一个要求,我们有单独的合同和实施程序集。创建 nuget 包并尝试使用 nuget 包后,它会失败,因为包管理器无法找到依赖(合同)程序集。

这似乎是 .net 核心中的一个未解决问题。

https://github.com/dotnet/cli/issues/3959

无法理解为什么这么简单的事情在 .net 核心中不起作用。正在寻找解决此问题的方法。

【问题讨论】:

    标签: c# .net asp.net-core nuget nuget-package-restore


    【解决方案1】:

    解决起来很简单。您有 2 个选择:

    A) 将所有项目打包并发布为 Nuget 包:

    您只需将您的依赖项作为ProjectReference 添加到您的主项目中。并使用项目参考继续开发。还必须打包所有依赖项目。当你想使用相同版本发布你的包时,只需运行:

    dotnet pack -p:PackageVersion=2.1.0还可以添加任何其他pack参数

    由于在pack 期间,所有ProjectReference 都将转换为包依赖项。而version 号码正在级联到所有包中。

    在这种情况下,您的原始主项目及其所有依赖项都将被 Nuget 打包。现在你必须发布所有。当你想安装你的 Nuget 包时,它也会安装它的所有依赖项以及指定的相同版本。

    B) 将所有输出 DLL 打包到一个 Nuget 包中:

    您只能将一个项目发布为 Nuget 包,并将所有其他 DLL 打包到该包中。首先抑制pack 将依赖项从项目转换为包。找到您的ProjectReference 并将PrivateAssets="All" 添加到其中。应该是这样的:

    <ProjectReference Include="yourproj.csproj" PrivateAssets="All" />
    

    并将以下部分添加到您的 .csproj 文件(应打包的项目中)以打包依赖 DLL,更改 DLL 名称和 &lt;PackagePath&gt; 中的 Framework version。。 p>

    <ItemGroup>
      <_PackageFiles Include="$(OutputPath)\yourproj.dll">
        <BuildAction>None</BuildAction>
        <PackagePath>lib\net5.0</PackagePath>
      </_PackageFiles>
    </ItemGroup>
    

    【讨论】:

    • B) IDE 无法识别 标签
    • 你有 .Net Core 项目吗? .Net Core 和 .Net5 对我来说效果很好
    • 我有核心 3.1
    • 至于方法A——这个方法的重点是什么?我可能不明白,但 dotnet pack 不包含参考((
    • 我已经在一个使用 VS 2019 的 .NET Core 3.1 项目中进行了尝试,并且选项 B) 运行良好。你有 VS 2019 吗?此外,您可能会添加重复的 ProjectReference 或将 XML 节点复制到错误的位置...我认为您遗漏了 部分!
    【解决方案2】:

    阅读文档后,我了解到 .net 核心不鼓励项目引用,而是建议使用包引用。这在以下文档的描述标题中有所提及。

    https://github.com/dotnet/docs/blob/master/docs/core/tools/dotnet-pack.md

    我将我的合同程序集发布到 nuget 包,并在实现中将其作为 nuget 包使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 2021-04-02
      • 2017-02-22
      相关资源
      最近更新 更多