Why does this web.config transform say it can't find the applicationSettings element?
Asked Answered
M

2

27

I get the following error while transforming a web.config file in TeamCity. It happens on the element, <applicationSettings xdt:Transform="Replace">.

No element in the source document matches '/configuration/applicationSettings'

The source file has this setting. Any idea how to solve this?

Miniver answered 27/7, 2011 at 13:11 Comment(0)
M
32

I had to remove the namespace attribute from the configuration node. There is some conflict in the declared schema and the elements I was using.

xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"
Miniver answered 27/7, 2011 at 15:1 Comment(2)
I was looking for a solution for this problem, and this is the only answer on the web that worked for me, thanks!Albany
I had the opposite problem with custom configuration sections. On the custom root element, I had to include the namespace attribute that matched the custom configuration schema or get the "no element matches" error. So <customConfig> wouldn't match if I specified any transformations; I had to use <customConfig xmlns="customSchemaUrl">. Only then would the transformations work inside my custom configuration section.Cultured
N
19

I would like to give a more detailed answer for others here.

In Visual Studio 2010 the web.config transform engine didn't respect xmlns declarations. Because of that if your source web.config had an xmlns declaration, and if you created a transform then the transformation would not work. This is because when we perform the XPath to identify the source which should be replaced we cannot find the value. In order to work around this you should remove the xmlns declaration on the source web.config as well as the transform.

With that being said, in Visual Studio 2010 SP1 we fixed the namespace bug. So your source web.config as well as your transformation must agree on the xmlns, if one has it the other must have it as well.

I suspect that you are using the pre-SP1 bits, but not sure. In order to ensure that the behavior doesn't change if you upgrade to SP1 I recommend you remove xmlns declaration from your source web.config as well as your transforms. The xmlns is not needed in the web.config file so it is safe to remove it.

Narrowminded answered 29/7, 2011 at 5:51 Comment(7)
am I right that its possible to workaround this bug with named namespace in transformation file, matched corresponding xmlns from transformed file ? Its not good to remove namespaces from xml - then it will be completely different xml from the point of xml processor...Allanson
You don't need named ns elements, you can make it work with the default xmlns but they have to be on both source as well as transform. With that being said. For web.config there is no difference if there is an xmlns or not. It's recommend to not have it (also explains why there is no xmlns on web.config when you create a new project in VS).Narrowminded
we are using transformations not only for web.config kind of xml =\Allanson
They should work as long as your namespace declarations match for both document/transform.Narrowminded
Due to some yet unknown curcumstances I got following error message "Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function." when I trying to prefix all elements in transformation. I dont sure that we could easily deploy SP1 on that build machine atm. Any hints to workaround this ?Allanson
"They should work as long as your namespace declarations match for both document/transform" It doesn't work - it's ridiculous. I have the same xmlns= value in both the base config and the transformer config - it doesn't transform because it can't find a matching node in the base config. The XmlTransformation class doesn't seem to support namespaces. This blows our use of Quartz.Net out of the water because Quartz requires an xmlns= value set in the file. How is it possible in this day and age that xml namespaces aren't supported?Tweezers
I'm using Visual Studio 2017 and still have the exact same problem for '/configuration/system.webServer/rewrite'.Alita

© 2022 - 2024 — McMap. All rights reserved.