Как мне использовать Powershell для добавления / удаления ссылок на csproj?

В отношении этого предыдущего вопроса я пытаюсь создать пакетный файл, который как часть должен удалить и добавить ссылку на XML * .csproj файл. Я просмотрел этот , этот , этот и этот предыдущий вопрос, но как Powershell n00b я не могу заставить его работать (поэтому далеко).

Кто-нибудь может мне помочь со следующим? Я хочу удалить две конкретные ссылки в файле VS2010 csproj (XML) и добавить новую ссылку.

Я открыл csproj, и ссылку можно найти по следующему адресу




  
  
  

  
    
  
  
    
      {AAB784E4-F8C6-4324-ABC0-6E9E0F73E575}
      SomeProject
    
    
      {B0AA6A94-6784-4221-81F0-244A68C374C0}
      AnotherProject
    
  

  
  
  


В основном я хочу:

  • удалить эти две ссылки
  • вставить новую ссылку на предварительно скомпилированную DLL, указанную относительным путем
  • ИЛИ Добавить расположение ссылки на сборку в проект, заданный относительным путем

В качестве очень простого примера я попробовал следующий сценарий PowerShell для удаления всех узлов ProjectReference. Я передаю путь к csproj в качестве аргумента. Я получаю сообщение об ошибке Невозможно проверить аргумент «XML». Аргумент равен нулю или пуст . Я могу подтвердить, что загружает csproj и сохраняет его на месте без изменений, поэтому путь правильный.

param($path)
$MsbNS = @{msb = 'http://schemas.microsoft.com/developer/msbuild/2003'}

function RemoveElement([xml]$Project, [string]$XPath, [switch]$SingleNode)
{
    $xml | Select-Xml -XPath $XPath | ForEach-Object{$_.Node.ParentNode.RemoveAll()}
}

$proj = [xml](Get-Content $path)
[System.Console]::WriteLine("Loaded project {0} into {1}", $path, $proj)

RemoveElement $proj "//ProjectReference" -SingleNode

    # Also tried
    # RemoveElement $proj "/Project/ItemGroup/ProjectReference[@Include=`'..\SomeDirectory\SomeProjectFile.csproj`']" -SingleNode
    # but complains cannot find XPath

$proj.Save($path)

Что я делаю не так? Любые комментарии / предложения приветствуются :)

12
задан Community 23 May 2017 в 12:09
поделиться