Visual Studio 2022 如何在构建时编译外部 C# 源文件?
数据阿明
结论
Visual Studio 2022 的普通 C# 项目不支持用 <insert ...> 这样的标记,将任意文件内容直接展开到另一个 .cs 文件中。你可以把外部 .cs 文件作为项目的编译项加入项目,让它和其他 C# 文件一起编译。文件中定义的类型和成员也可以正常引用。构建时,编译器会读取该文件当前保存的内容。
将外部文件加入项目
在 Visual Studio 中选择“添加”→“现有项”,选中文件后,点击“添加”按钮旁的菜单并选择“添加为链接”。这样项目会引用原文件,而不会在项目目录中复制一份。
也可以直接编辑 SDK 风格项目的 .csproj:
<ItemGroup>
<Compile Include="C:\Users\c\myfile.cs" Link="Shared\myfile.cs" />
</ItemGroup>
Include 指向源文件的实际位置,Link 决定它在 Visual Studio 项目树中的显示位置。要确保文件作为 Compile 项参与构建。如果文件位于项目目录之外,SDK 的默认文件包含规则通常不会自动找到它。
在多个项目中复用
需要使用该文件的每个项目都可以添加同一个链接文件。修改并保存源文件后,后续构建会编译其最新内容。如果文件由脚本生成或更新,要确保生成步骤在 C# 编译前完成,并且编译时目标文件已经存在。
链接文件会和项目内的源文件一起编译,因此其中声明的类型可以直接使用。若要向已有类型添加成员,两处声明都需要使用 partial,例如:
// 主项目中的文件
public partial class Settings
{
}
// 链接的 myfile.cs
public partial class Settings
{
public string Name { get; set; } = "default";
}
如果文件定义的是独立类型,可以按照正常的 C# 规则,通过命名空间和类型名引用它。
注意事项
这种方式让多个项目编译同一份源文件,但不会把文件内容展开到主 .cs 文件中。如果确实需要生成源码,可以在编译前生成 .cs 文件,再将它作为 Compile 项参与构建。项目配置需要保证生成文件的路径和构建顺序。#load 用于 C# 脚本场景,不能作为普通 C# 项目的通用源码插入指令。
备注:内容仅供参考。
