1

我非常需要了解如何使用 Visual Studio 2010 在 c# 中管理一些非常基本的架构问题,并且在教科书和网站中找到解决方案时遇到了一些麻烦。假设我有一个 MyWinForm.sln 解决方案,它基于:MyWinForm.cs 和两个类库,假设:a.dll、b.dll 我的目标:我想重构我编写的应用程序,以便按顺序学习 C#拥有一个体面的应用程序架构。

  1. 我希望设计一个必须包含通用方法的 c.dll,以便在不同的应用程序中重用它:MyWinForm 和,比如说,yawfs.sln(另一个 Windows 窗体解决方案),以便我可以创建对 c 的引用。两种解决方案中的 dll。我想我应该创建一个新的类库解决方案 为了重用它的类。但是,据我所知,我无法添加对不同解决方案的引用:我只能添加对当前解决方案中的程序集(当前解决方案中的不同项目)或 .Net 程序集的引用。我应该使用导航面板选择 a.dll 程序集来添加对它的引用吗?也许有一种方法可以将现有程序集包含到当前解决方案中,使其与相应解决方案中执行的更改保持同步?我不明白。

  2. 如果我想从 MyWinForm 中提取 b.dll 来推广它,以达到与 c.dll 相同的目的,该怎么办?我如何将其作为新的解决方案进行推广?

  3. 现在假设我需要分叉 MyWinForm 以便我拥有 MyWinFormLeft.sln 和 MyWinFormRight.sln;两者都将以与公共共享代码不同的方式发展。他们将使用(并共享)相同的 a.dll 和 b.dll 程序集(相同版本),但 MyWinForm.cs 中的代码将开始更改。从现有解决方案创建新解决方案的正确方法是什么?

我知道我的问题听起来很混乱,但麻烦来自我试图在联合 VS 和 C# 使用模式与我之前使用的 C 编译器/链接器周期之间执行的比较:编译代码以获取您的库然后链接到他们无论应用程序需要它们。时期。

4

3 回答 3

2

当面临在多个解决方案之间共享代码的需要时,我倾向于将共享代码放入它自己的解决方案中,然后将其打包为 nuget(请参阅此处了解如何。)

然后,任何需要以版本化且易于同步/更新的方式使用其功能的解决方案都可以引用 nuget(nuget 可以简单地存在于本地文件夹中。)

于 2013-03-01T19:36:15.657 回答
1

我想我应该创建一个新的类库解决方案以便重用它的类

你猜对了。

我无法添加对其他解决方案的引用:我只能在当前解决方案中添加对程序集的引用

您只能在当前解决方案中添加对项目的引用。您可以添加对作为另一个解决方案输出的已构建程序集的引用。

如果我想从 MyWinForm 中提取 b.dll 怎么办?

b.dll 将独立于 MyWinForm.exe 进行部署 - 您不需要“提取”它。

现在假设我需要分叉 MyWinForm 以便我拥有 MyWinFormLeft.sln 和 MyWinFormRight.sln;...从现有解决方案创建新解决方案的正确方法是什么?

这取决于两个项目之间差异的严重程度。常见的非可视组件可以是共享类库中的类。常见的可视化组件可以是同一类库中的用户控件,也可以是单独的类库中的用户控件。

于 2013-03-01T19:30:10.390 回答
1

这和任何事情一样都是个人喜好问题。

您可以在多个解决方案中拥有项目。我个人认为这是等待发生的灾难,但它确实有它的粉丝。我已经看到人们对此陷入严重的混乱依赖。如果您要重构一些东西并且需要打破一些依赖关系,您可以将其拉到一端,然后将整个父解决方案放在您的膝上。它需要一些严肃的纪律,但如果你把事情搞砸了,你就不能那样不小心射中自己的脚。

您可以将所有内容放在一个解决方案中,该解决方案也有它的粉丝,如果我同时开发多个库 + 原型 + 单元测试,它确实可以节省大量切换。

我认为你说你想去的方式以及我们倾向于这样做的方式。

首先,您可以添加对从其他解决方案中的项目构建的 dll 的引用只需进入添加引用,其中一个选项卡是浏览,选择文件夹,选择 dll。

问题是你现在有一个在你的解决方案之外的构建依赖,与使用 3rd 方 dll 没有什么不同。所以如果你想在common.dll中添加另一个通用函数,你必须切换解决方案,添加它,构建它,切换解决方案(或者有两个副本VS去)

之后,这只是一个问题,即如何确保您引用的 dll 是您刚刚构建的那个。这可以将构建路径设置为公共文件夹,或者在构建后事件将其复制到使用项目所期望的位置。如果您喜欢痛苦,可以手动复制它...

找到适合您需求的方式有很多灵活性。

于 2013-03-01T20:27:03.070 回答