为什么即使我将代码移到子文件夹后也找到了代码?

时间:2015-12-22 22:34:52

标签: visual-studio-2013 shared-directory file-structure resharper-10.0

我开始对我的应用程序的文件结构进行重构,因为它有各种明确定义的部分,并将它们放在各种文件夹中会使整个事情更容易理解/可维护。

当我在Visual Studio中创建文件夹,将* .cs文件移入其中,然后尝试编译时,我以为我会遇到问题。但不,VS没有那么多偷看,而且运行得很好。

更具体地说,我在项目下面创建了一个名为“SharedCode”的文件夹,然后将名为SQLDBHelper.cs的文件拖到该文件夹​​中(我没有复制它,我移动了它)。我想到了对代码的引用,例如:

DataTable dtPriceComplianceResults = SQLDBHelper.ExecuteSQLReturnDataTable(ReportRunnerConstsAndUtils.SUMMARY_STOREDPROC, . . .

...将停止工作,因为他们以前在同一级别(直接在项目下方,“ReportRunner”)找到该文件,现在它位于“ReportRunner \ SharedCode”

但它采取了大步迈进 - 编译,并在我运行应用程序时成功拨打电话。

我还期望Visual Studio(或Resharper?)会在SQLDBHelper中改变它:

namespace ReportRunner

......对此:

namespace ReportRunner.SharedCode

......但事实并非如此。为什么这个无缝地工作,这是否意味着我可以创建其他项目文件夹并将文件拖到他们的willy-nilly并期望所有代码仍然知道在哪里查找它所调用的代码?

更新

虽然它编译并运行良好,但当我让Resharper猎犬松散时(通过Resharper> Inspect>解决方案中的代码问题),我得到了一些指法:

Project ReportRunner
  PriceCompliance\PriceComplianceRpt.cs:13 Namespace does not correspond to file location, should be: 'ReportRunner.PriceCompliance'

如果我默认并让Resharper“解决问题”,则命名空间从“命名空间ReportRunner ”更改为“命名空间ReportRunner.PriceCompliance

但是,如果没有对命名空间进行重新修改,一切正常,那么将文件夹名称附加到命名空间有什么好处呢?

1 个答案:

答案 0 :(得分:1)

命名空间和该命名空间中的类所在的文件夹不会具有匹配的。 C#或.NET中没有任何内容可以强制执行此操作。您可以调用命名空间A.Really.Long.Name.With.Lots.Of.Dots并将类放在名为code的文件夹中,以供编译器关注。它是一台计算机,无论被称为什么,计算机都能很好地跟踪事物。

然而,优秀的做法是组织文件夹以使它们与命名空间匹配(反之亦然),因为它使(人类)更容易找到你的文件/文件#39;重新寻找。您很难记住代码在我的(公认的极端)示例中的位置,但在您的情况下,ReportRunner.PriceCompliance中的所有类都将位于名为..\ReportRunner\PriceCompliance的文件夹中,而不是位于其他位置的文件夹中硬盘。

所以ReSharper在这里所做的是强制执行 - 这是它擅长的。