C# 在共享项目中使用 references/class 库

C# Using references/class library in a shared project

我刚刚在visual studio 2017年学习并创建了一个共享项目。我注意到共享项目没有"Reference"引用其他资源(其他项目,class 图书馆,……)。我什至看了一下 .shproj 文件,发现它只导入了我在共享项目中创建的 class。

我的问题是,如果我想创建一个附加应用程序,我需要使用 class 库来调用由原始软件公开的必要 API。 我如何 reference/add 其他项目/ class 库(或一般资源)到我的共享项目?或者这根本不可能吗?

这里也描述了我的部分问题reference to a shared project from other shared project

但我需要一个更通用的解决方案。谢谢大家的帮助。

您需要在使用共享项目的项目中添加引用。

举个例子,假设您有 "Project A" 引用 "Shared Project B",并且您需要在 "Shared Project B" 中使用 Newtonsoft.Json。由于您无法添加对共享项目的引用,因此您将 Newtonsoft Nuget 包安装到 项目 A 并且 "Shared Project B" 中的代码将自动编译。

长话短说:共享项目不会,而且实际上不能那样工作。

在 Visual Studio 中,共享项目只是文件(源代码、资源等)的容器,您可以将其添加到其他项目中。这在某些情况下非常有用,当您想在多个项目中使用相同的代码(等等)而不将该代码放入库中时。

共享项目没有引用,没有 NuGet 包或任何东西,只有它们包含的文件。它们甚至没有编译它们包含的任何源文件所需的配置数据,如果共享项目未包含在某种完整项目中,编译器将不会对内容进行太多验证。

并且由于共享项目无法指定引用或包,因此您需要将这些引用和包添加到链接到共享项目的每个项目。如果你错过了一个,编译器会很快告诉你。

虽然在共享项目中有引用会很好,但事实证明它远没有您想象的那么简单。同一个共享项目可以包含在针对不同框架、平台和架构的项目中。假设您正在构建一些将 运行 在 iOS、Mono、Windows .NET Framework 和 .NET Core 上的代码,每个目标都有特定代码和一些共享代码。如果您尝试将 NuGet 依赖项添加到共享项目,它至少会在其中一个项目上炸毁您的脸。与大多数参考文献相同。添加 .NET Core 所需的所有引用,其他项目突然无法编译。