我们知道,在用C#开发中,通过vs编辑器新建的脚本,会自动包含到vs工程中,而通过外部创建,比如复制别的工程或代码创建的C#脚本不会包含到vs工程。
在我们的日常开发中,通常会自动创建C#脚本,特别是用编辑器代码生成UI代码。
deepseek搜了几种方案,试了两种,都不能正确将代码包含到工程。下面记录一个可以正常使用的方案。
public static void AddFileToProject(string projectPath, string filePath)
{
filePath = filePath.Replace("/", "\\");
// 直接修改 .csproj 文件(需要 XML 操作)
XDocument doc = XDocument.Load(projectPath);
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
// 查找或创建ItemGroup
var itemGroup = doc.Descendants(ns + "ItemGroup")
.FirstOrDefault(g => g.Elements(ns + "Compile").Any())
?? new XElement(ns + "ItemGroup");
// 添加文件项
itemGroup.Add(new XElement(ns + "Compile",
new XAttribute("Include", filePath)));
// 若ItemGroup是新建的,添加到Root
if (itemGroup.Parent == null)
doc.Root.Add(itemGroup);
doc.Save(projectPath);
}
1、projectPath:项目(.csproj)文件的绝对路径(D:\MyProject\frame-work\Project\Demo\Demo.csproj)
2、filePath: 代码的相对路径,不清楚的可以在VS工程中创建一个测试脚本,然后对比工程文件前后差异。(注意路径是反斜杠“\”)
好了,通过以上代码就可以自动将新建C#文件包含到工程里面了。