Как добавить новую PropertyGroup в csproj из powershell
У меня есть следующий файл PS1. В этом файле три проблемы.
Q1. Как использовать одинарные и двойные кавычки в XML? Я погуглил и обнаружил, что мне нужно поставить еще одну одиночную кавычку. Я пытался, но не сработало.
Q2. Я получил ошибку "неправильный тип", когда я добавляю новую группу PropertyGroup в качестве дочернего элемента к узлу проекта. Как я могу это исправить.
Q3. Могу ли я добавить несколько групп PropertyGroup к узлу проекта?
$dir = "C:\Work\scripttest\output\"
$ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }
$configs = [xml]"<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Dev-1|AnyCPU'">
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
";
Get-ChildItem $dir *.csproj -recurse |
% {
$content = [xml](gc $_.FullName);
$project = $content.Project;
$project
$project.AppendChild($configs);
# $content.Save($_.FullName);
}
Заранее спасибо!
1 ответ
Q1: Escape-символ в powershell - это `а не кавычка. Имейте в виду, вы также должны избегать символа $
Q2: у вас были проблемы, потому что $project.AppendChild();
является XmlNode
и ваш $configs
такое XmlDocument
Q3: Вы можете, но не уверены, что MsBuild будет доволен этим
А вот и сам скрипт:
$dir = "C:\Work\scripttest\output\"
$ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }
$configs = [xml] "<PropertyGroup Condition=`"'`$(Configuration)|`$(Platform)' == 'Dev-1|AnyCPU'`">
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>"
Get-ChildItem $dir *.csproj -recurse |
% {
$content = [xml](gc $_.FullName);
$importNode = $content.ImportNode($configs.DocumentElement, $true)
$project = $content.Project;
$project
$project.AppendChild($importNode);
# $content.Save($_.FullName);
}
Как вы можете видеть, мне пришлось импортировать первый элемент, как это было из другого документа