如何在子文件夹中组织 C# 源文件?

How to organise C# source files in subfolders?

背景 我主要在嵌入式 C/C++ 中编程,但有时我必须为我们的 API 做一些 C# 编程。为此,我正在使用 Visual Studio 2017 为我们的客户创建一个 API DLL。

C# API 和我们的 C/C++ 固件使用一组通用的状态代码。我有一个 Lua 脚本,可以将这些代码生成到 .h(对于 C/C++)和 .cs(对于 C#)文件,因此它们始终保持同步。

跨产品和平台共享的所有源文件都在一个名为 "Common" 的特殊项目中(签入到 Subversion)。

当我们创建新项目并使用任何 "common" 文件时,我们将它们放在一个名为 "Common\" 的子文件夹中,因此我们知道没有必要弄乱它们。 Subversion 将检出这些 "Common" 文件作为每个项目使用的特定修订版的外部文件。

在C/C++中,将源代码组织在多个文件夹中完全没有问题,所有源文件都有一个到根项目文件夹的相对路径。

问题 所以在这个C#项目中我照例整理了源码:

ProjectRoot\source.cs
ProjectRoot\Common\EStatusCodes.cs

ProjectRoot\ 中我们有这个 C# 项目的所有 .cs 文件,在 ProjectRoot\Common\ 中是来自 subversion 的 "Common" 项目的外部文件。

因此,在将外部 EStatusCodes.cs 检出到 ProjectRoot\Common\ 文件夹后,我通过 "Add->Add Existing..." 将其添加到 C# 项目,然后我指出 ProjectRoot\Common\EStatusCodes.cs 文件.

该文件显示在项目中,但出于某种原因 Visual Studio 已将文件从 ProjectRoot\Common 文件夹复制到 ProjectRoot\ 文件夹,然后正在使用副本! (属性中的文件路径设置为 ProjectRoot\ 文件夹。

因此,如果我们向 "Common" 项目添加更多状态代码,则此 C# 项目不会获得更新,因为 Visual Studio 现在始终使用来自 [=11= 的文件的复制版本] 并且不关心 ProjectRoot\Common\EStatusCodes.cs 是否已更新。

我尝试将 Common 文件夹添加到 "Properties->Reference Path",但每次我将其添加到项目时它仍然复制文件。

是否有可能在 C# 项目的根文件夹之外的其他地方拥有源文件?

在“添加现有”对话框中,“添加”按钮旁边应该有一个向下的小箭头。如果单击此按钮,您将看到 "Add As Link" 的选项。这会将文件添加为原始文件的参考 link,对原始文件的任何更改都将反映在您的项目中。

我们在 C# 项目中有类似的方法:将现有文件 添加到项目中作为 "Add as link".

请参阅此link了解更多详情: https://grantwinney.com/visual-studio-add-file-as-link/