繁体   English   中英

我想创建一个操作C#项目文件的工具

[英]I want to create a tool that manipulates C# project files

(基本上我们想在* .csproj文件中的某些地方导入目标文件,否则检查文件是否符合我们的标准)

这样做的最佳方式是什么? 我打算使用C#和XDocument(LINQ to XML)并操纵节点。 但这是最好的方法吗? 其他替代方案可能是:

  1. 找到csproj / msbuild的XSD并创建代表项目文件的stronly类型对象。 这可能吗?
  2. 还有其他更好的工具/语言(它可以用它作为学习Ruby的借口)。 答案必须有一些链接到操作XML的示例。

也许真正的问题是:以编程方式阅读和操作XML的最佳方法是什么?

我个人只是直接使用LINQ to XML ...除非你正在进行非常繁重的处理,否则我认为不值得为它创建一个对象模型。 您需要多少规则/这个工具需要什么?

MSBuild (项目文件的格式)具有一个对象模型 ,您可以将其用于此类应用程序。

我们有一个内部工具,可以动态操作项目文件来更新引用并设置各种属性。 由于项目文件并不复杂,我们只需直接操作XML。 该工具早在LINQ可用之前编写,所以它没有使用它,但我认为没有理由你不能做Jon的建议。

当我们从VS2005升级到VS2008时,我们只需要对代码进行微调,但当然在这方面没有任何保证。 我们可能不得不对未来的版本做更大的调整。

如果你感兴趣的话,在我对这个问题的回答中我们的工具会有更多的信息应该.sln是否致力于源代码控制?

根据我们问题的第二部分,如何以编程方式操作XML,这里是项目配置文件中的一些xml。 (web.config中)

 <system.web>
<compilation debug="false">
<assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, 
</compilation>
</compilation>

并使用LINQ-TO-XML进行解析,如下所示

XDocument assemblies = XDocument.Parse("web.config");

var projectAssemblies= from a in assemblies.Descendants("system.web\assemblies")
               select new  // What ever object you waant
               {
                   Assembly = a.Attribute("assembly").Value.ToString(),
                   Version = a.Attribute("Version").Value.ToString(),
                   Culture = a.Element("Culture").Value.ToString(),
                   PublicKeyToken = a.Attribute("PublicKeyToken").Value.ToString()
               };

foreach (var v in projectAssemblies)
{
    // enjoy them 
}

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM