我试图加载一个csproj文件,并在powershell中更改它的根命名空间。
csproj文件的xml如下所示:
<Project...xmlsns=" >
<PropertyGroup>
<RootNamespace>SomeNamespace</RootNamespace>
...
我可以通过属性导航来获取值
> $xmlDoc = (Get-Content myProject.csproj)
> $xmlDoc.Project.PropertyGroup.RootNamespace ## Outputs SomeNamespace
但是我不能给它赋值-在powershell中设置xml值失败,在此对象上找不到属性'...'...
我已经用一个手工制作的xml文件试过了,并且成功了
<Test>
<TestInner1>
<TestInner2>SomeValue</TestInner2>
</TestInner1>
</Test>
>$xmlDoc = [xml](Get-Content test.xml)
>$xmlDoc.Test.TestInner1.TestInner2 = "Some Other Value"
>$xmlDoc.Test.TestInner1.TestInner2 ## Returns Some Other Value
我修改了TestInner 2下的元素-添加了额外的元素,自封闭元素。我已经为Test添加了一个命名空间。仍然能够在这些情况下设置值。
当在powershell伊势中,获取类型的intellisense时,我注意到在我的测试xml中,每个Test,TestInner 1和TestInner 2都是XmlElements。然而,在项目文件中,Project和PropertyGroup是XmlElements -但随后Intellisense停止并且不提供RootNamespace。当我得到PropertyGroup的类型时,它是一个Object[],RootNamespace的类型是string。RootNamespace声明具有{ get;但是我在设置时遇到了上述错误。
如果有一个工作在项目文件的变通方法,我很感兴趣,但我同样有兴趣知道为什么上面的两个例子不同,即我错过了什么!
2条答案
按热度按时间tkclm6bt1#
项目节点下有多个PropertyGroup节点。通常是这样
如果只有一个元素,XmlDocument类将返回第一个元素,但如果有更多元素,则需要索引。您的Test示例之所以有效,是因为只有一个名为TestInner2的子元素。如果知道PropertyGroup元素的位置,可以通过索引访问
或者你使用原力使xml屈从于你的意志
wrrgggsh2#
这个也行