.vcxprojとcsprojはxmlなので、pugixmlで内容を解析できる。例えばプロジェクト名を変えてみる。
#include <iostream> #include <fstream> #include "pugixml.hpp"
// vcxprojファイルへのアクセスと編集 void vcxproj(std::string vcxproj_path) { pugi::xml_document doc; doc.load_file(vcxproj_path.c_str()); pugi::xml_node property_group; pugi::xml_node project = doc.child("Project"); for (pugi::xml_node node : project.children("PropertyGroup")) { if (node.attribute("Label") && std::string(node.attribute("Label").value()) == "Globals") { property_group = node; break; } } // プロジェクト名を取得 pugi::xml_node root_namespace = property_group.child("RootNamespace"); std::cout << root_namespace.child_value();
// プロジェクト名を編集 root_namespace.text().set("MyNewProjectName"); doc.save_file(vcxproj_path.c_str()); }
// csprojファイルへのアクセスと編集 void csproj(std::string csproj_path) { pugi::xml_document doc; doc.load_file(csproj_path.c_str()); pugi::xml_node project = doc.child("Project"); pugi::xml_node root_namespace; for (pugi::xml_node node : project.children("PropertyGroup")) { pugi::xml_node candidate = node.child("RootNamespace"); if (candidate) { root_namespace = candidate; break; } } // プロジェクト名を取得 std::cout << root_namespace.text().as_string() << std::endl; // プロジェクト名を編集 root_namespace.text().set("MyNewProjectName"); doc.save_file(csproj_path.c_str()); }
int main() { std::string cs_proj_path = R"(C:\test\ConsoleApp1-SCharpProj\ConsoleApp1-SCharpProj.csproj)"; std::string vc_proj_path = R"(C:\test\ConsoleAppl-CPPProj\ConsoleAppl-CPPProj.vcxproj)"; csproj(cs_proj_path); vcxproj(vc_proj_path); }