序列化和反序列化Visual Studio解决方案文件 – 或以编程方式编辑?
我想以编程方式添加和删除项目,解决方案文件夹和其他项目(如资源文件)到解决方案,但我不确定什么是最好的方法。
对于那些不了解的人,高度简化; 这是一个suution文件(.sln)通常的样子:
Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "project name", "projectpathname.csproj", "{785ECC80-AF1B-4FBC-B97B-2EC43B7E81E8}" EndProject Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {785ECC80-AF1B-4FBC-B97B-2EC43B7E81E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU EndGlobalSection EndGlobal
我不确定这是否是一个真正的开放标准,如xml(它是?),但它看起来像是基础团队制作了自己的xml版本。 (不是恭维)
那么,无论如何,将这些对象序列化和反序列化的最佳方法是什么? 我正在考虑制作自己的IFormatter,但这看起来相当复杂。
使用EnvDTE库:
根据MSDN, EnvDTE is an assembly-wrapped COM library containing the objects and members for Visual Studio core automation.
您还可以使用示例找到Solution
和Project
界面的文档,这些示例应该非常有用。
没有EnvDTE库:
解决方案文件
这里似乎没有太多事情要做 – 添加项目和设置构建配置。 在我看来,最好的方法是使用简单的TextReader解析它,并在添加一些数据后重写它。 这是模板。
Project("{solution guid}") = "project name", "projectpathname.csproj", "{project guid}"
请记住在每个项目中使用相同的解决方案。
项目文件:
这里没什么惊喜,它是标准的XML文件,您可以使用LINQ to XML创建/修改它。 有关示例的整个规范可在此处获得: http : //msdn.microsoft.com/en-us/library/dd393574.aspx 。 当然不要忘记在解决方案文件中使用相同的项目guid。
我希望它会有所帮助。
这是一些代码:
using EnvDTE; ..... Solution s = new SolutionClass(); s.Open(solutionFilePath); s.AddFromFile(projectFilePath); s.Remove(s.Projects[6]);
您可以像foreach(var project in s.Projects)
一样导航项目,并检查他们的project.Name
属性以找到您想要的项目。
添加到dll之后的引用(AddReference-> Browse选项卡):
C: Program Files(x86) Microsoft Visual Studio 10.0 Common7 IDE PublicAssemblies EnvDTE.dll。
所有类都在MSDN中有很好的记录。 EnvDTE是非常强大的VS自动化库,你可以做更多的事情然后添加/删除。 我自己也不打扰序列化sln文件,我同意发明自己的格式化是不好的。
上述就是C#学习教程:序列化和反序列化Visual Studio解决方案文件 – 或以编程方式编辑?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/998081.html