【问题标题】:Should nugets installed for library project also be installed to the application project?为库项目安装的 nugets 是否也应该安装到应用程序项目中?
【发布时间】:2020-07-01 13:26:35
【问题描述】:

如果我有一个库项目 MyLib 需要 Nuget XYZ,并且我创建了依赖于 MyLib 的应用程序 MyApp,我是否需要将 nuget 依赖项显式添加到 MyApp 或者是VS 应该解决这个问题吗?

我找不到这个基本问题的明确答案,而且我的测试显示出不确定的结果 - 我看到一些 DLL 被复制到 /bin 文件夹,而另一些则几乎没有。在我的项目参考中,Nuget 程序集没有列出,我不确定它们是否应该......现在有点“DLL 地狱阴霾”!

【问题讨论】:

标签: .net visual-studio nuget


【解决方案1】:

为库项目安装的 nugets 是否也应该安装到 申请项目?

这取决于你。当然,将nuget包添加到主项目中并不麻烦,不会造成任何问题,简单方便,但是当您注意以下几点时,无需另外添加nuget包.

在所有这些之前,有两种方法可以引用 nuget 包:packages.config formatPackageReference format

Packages.config 格式用于旧的 net framework 项目,而PackageReference 格式用于新的 sdk 样式项目(net corenet standard)。

不过 net framework项目也可以使用PackageReference(可以通过Tools-->Options-->Nuget Package Manager-->General-->Package Management切换),net core和net standard项目不能使用Packages.config格式。

建议

1) 如果库项目是Net framework,实际上,你应该使用将相同的nuget添加到主项目中,在某些情况下,这些dll可以复制到你的MyApp 项目的输出路径,

然而,如果你仍然想在代码编辑器中使用这些 dll,intellisense 不会列出它,在这种情况下,你应该在主项目中安装相同的 nuget 包。

进一步,只有这两个项目都使用PackageReference格式(Net Framework library project with PackageReference and MyApp Net Framework project with PackageReference)

2) 如果您的库项目是 Net Standard(PacakgesReference nuget 格式),并且您的 MyApp 项目是 Net Frameworkpackages.config,则 dll 将丢失在主项目中。解决方法是在 MyApp.csproj 文件中添加这些节点:

<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>

然后你会在主项目中得到智能感知。

-----------------------------------

或者你的Myapp项目是带有PackageReference格式的网络框架,你不应该添加那个节点,你可以直接获得你想要的。

如果MyApp项目是Net Core(PackageReference),你就不用担心这个了。

=================================

结论

为了满足你的要求,你最好使用Net Standard库项目,而你的MyApp项目最好使用PackageReference nuget管理格式(Net Core或@ 987654343@ 带有 PackageReference 格式)。

另外,您应该将您的VS更新到最新版本以获得更好的体验,以防有一些重要的修复。另外还有a similar issue可以参考。

【讨论】:

    【解决方案2】:

    根据处理复杂 C#.NET 应用程序的记忆 - 是的,我认为有必要添加依赖项。

    我开发的应用程序结构如下:

    服务器 --> 插件 1 --> MongoDB NuGet --> 插件 2 --> MongoDB NuGet

    我发现有必要将 MongoDB NuGet 引用添加到每个插件以及服务器组件。一旦我这样做了,它就可以可靠地工作(尽管它确实有缺点,即每次更新 NuGet 库时,我都需要单独更新每个插件)。

    如果有更简洁的解决方案很高兴得到纠正,只是想分享我的经验!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多