2017-06-01 27 views
0

编程方式更改引用获取所有*的.csproj和packages.config文件,不知道会有什么更新引用在* .csproj的和packages.config

var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories) 
        .Where(s => s.EndsWith(".csproj") || s.EndsWith("packages.config")).ToList(); 


<Reference Include="MyDev.Something"> 
    <HintPath>..\..\..\..\Packages\MyDev.Something.1.0\lib\net45\MyDev.Something.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

最好的办法我想改变1.0〜2.0

回答

1

.csproj.config是xml文件。他们很容易使用linq2xml进行处理。

XNamespace ns = @"http://schemas.microsoft.com/developer/msbuild/2003"; 

foreach (var file in files) 
{ 
    var xml = XElement.Load(file); 

    var nodes = xml.Descendants(ns + "Reference") 
     .Where(r => r.Attribute("Include").Value.Contains("MyDev.Something")); 

    foreach (var node in nodes) 
    { 
     var hintPath = node.Element(ns + "HintPath"); 

     if (hintPath.Value.Contains("MyDev.Something.1.0"))     
      hintPath.Value = hintPath.Value.Replace(
       "MyDev.Something.1.0", "MyDev.Something.2.0"); 
    } 

    xml.Save(file); // First make a backup! 
}