如何在没有visual studio的情况下将新文件添加到.csproj文件中

如何从命令提示符向.csproj添加新文件?

我不认为有任何工具会在命令行上响应“add-project”命令来执行此操作,但我认为您可以很幸运地创建一个程序/脚本来直接操作csproj文件的XML内容。

csproj文件的结构如下所示:

          

要将C#代码文件添加到项目,只需要将一个Compile元素添加到ItemGroup元素:

  

如果使用现有项目文件作为模板,则可以使用非常简单的XSLT。

这是使用Linq2Xml轻松实现的方法。 我已经包含了一个基于列表的方法。 哦,就像Casper说的那样:在程序编辑之前,你需要从VS卸载项目。 然后在完成后重新加载它。

  private static void AddFilesToUnitTestProject(FileInfo[] files, string measureBaseDirPath, string measureDataDirSuffix) { var unitTestProjectPath = measureBaseDirPath + _unitTestProjectFile; var unitTestProjectFile = XDocument.Load(unitTestProjectPath); var itemGroup = unitTestProjectFile.Nodes() .OfType() .DescendantNodes() .OfType().First(xy => xy.Name.LocalName == "ItemGroup"); foreach (var fileInfo in files) { var xelem = AddProjectContent(measureDataDirSuffix + fileInfo.Name, unitTestProjectFile); itemGroup.Add(xelem); } unitTestProjectFile.Save(unitTestProjectPath); } private static void AddFileToUnitTestProject(string pathToAdd, string measureBaseDirPath, string measureDataDir) { var unitTestProjectPath = measureBaseDirPath + _unitTestProjectFile; var unitTestProjectFile = XDocument.Load(unitTestProjectPath); var itemGroup = unitTestProjectFile.Nodes() .OfType() .DescendantNodes() .OfType().First(xy => xy.Name.LocalName == "ItemGroup"); var xelem = AddProjectContent(pathToAdd, unitTestProjectFile); itemGroup.Add(xelem); unitTestProjectFile.Save(unitTestProjectPath); } private static XElement AddProjectContent(string pathToAdd, XDocument doc) { XNamespace rootNamespace = doc.Root.Name.NamespaceName; var xelem = new XElement(rootNamespace + "Content"); xelem.Add(new XAttribute("Include", pathToAdd)); xelem.Add(new XElement(rootNamespace + "CopyToOutputDirectory", "Always")); return xelem; } 
  • 使用AddProjectContent方法更新

通过在解决方案资源管理器中右键单击卸载项目。 右键单击编辑项目。 添加f.ex:

  

.csproj文件可以用作MSBuild命令行工具的输入。

请参阅MSBuild参考:

MS Build Reference

例如,这个问题。

MSBuild – 使用.csproj文件或滚动自己的文件?

您只需使用文本编辑器编辑它们并执行MSBuild允许的任何操作。 如果插入自定义构建操作,Visual Studio可能会在加载项目时警告开发人员它包含自定义操作,具体取决于您执行的操作。