尝试更好地理解共享项目并在不同的解决方案中使用它们

Trying to better understand Shared Projects and using them in different solutions

尽管共享项目自 Visual Studio 2015 年就已经存在(可能早在 VS 2013 update2),但我最近才了解到它们。今天,我花了一些时间尝试学习如何按照我发现的教程使用它们 Shared Project: An Impressive Feature of Visual Studio 2015 Preview。然而,作者在该教程中所做的一件事对我们不起作用,那就是他创建了共享项目和 3 个其他项目,所有这些都在同一个解决方案中。当然,您可以这样做,但实际上我们可能希望在某些解决方案中创建一个共享项目,然后随着时间的推移,将该共享项目包含在其他解决方案中。

所以我没有将 Windows Forms 应用程序放入与 C# 角 post 的作者相同的解决方案中,而是创建了一个新的解决方案 Windows 在其中形成项目,然后我尝试从第一个解决方案中添加共享项目。首先,我尝试添加 .sln 文件。那失败得很惨。然后我尝试将 .shproj 文件添加到第二个解决方案中。那也惨遭失败。

接下来我在 SO 上分享了解决这个问题的方法。我找到了 2 posts: and How do I add a reference to a Shared Code project (.shproj) from another project。第二个给了我一个想法。我决定简单地将共享项目从第一个解决方案添加到第二个解决方案,方法是单击解决方案资源管理器中的第二个解决方案,然后执行 "Add Existing Project"。成功了。

但我想知道,这就是您使用共享项目的方式吗?如果是这样,在我看来我也可以在第一个解决方案中创建一个简单的 class 库,然后将该 class 库项目添加到第二个解决方案中。如果您将共享项目添加到不同的解决方案,而不是仅将常规 class 库项目添加到解决方案,是否有一些关于共享项目的东西使它们本质上更好用?

class 库编译成它自己的 DLL,您的原始项目引用该 DLL,而使用共享项目的项目将编译成单个程序集。对于共享项目,我可以想到的一种情况是,您可以拥有单一代码库,但具有由指令标记的平台特定代码部分。

关于这个主题有一个很好的视频,尽管它是在 xamarin 的背景下解释的,我认为他们做得很好。 https://www.youtube.com/watch?v=G5ov0gLZWgQ

就我个人而言,我总是会选择 PCL(便携式 class 库)而不是 SAP(共享项目)。我在我的项目中使用共享代码项目作为文档容器。项目绿色图标非常醒目。我把所有东西都放在那里,从 markdown doc 文件到存储过程等等。