25
votes

I have broken down the horribly unwieldy web.config file into individual files for some of the sections (e.g. connectionStrings, authentication, pages etc.) using the configSource attribute.

This is working fine, but the individual xml files that hold the section 'snippets' cause warnings in VS.

For example, a file named roleManager.config is used for the role manager section, and looks like this:

<roleManager enabled="false">
</rolemanager>

However I get a blue squiggle under the roleManager element in VS, and the following warning: The 'roleManager' element is not declared

I guess this is something to do with valid xml and schemas etc. Is there an easy way to fix this? Something I can add to the individual files?

Thanks

P.S. I have heard that it is bad practice to break the web.config file out like this. But don't really understand why - can anyone illuminate me?

2
I don't see why it can be bad practice. Be aware that changing these .config files will NOT result in a restart of the Web app (like if you edited the web.config itself)Timores
Didn't realise that - thanks, good to know.UpTheCreek
One nice thing about using the configSource attribute is if you have to hand your code over to somebody else to place it inside their company servers they can easily see what they need to change in the web config (connectionStrings, etc...) for their environment.Michael Grassman
FYI - you can add an attribute to make changes to these files trigger a restart on modification. restartOnExternalChanges="true" Source:learnable.com/books/…David Schwartz

2 Answers

28
votes

Searching a workaround to this matter using Custom Config Files, I found this solution. Dont know if is the correct one.

The problem is that VS cant find a schema to validate your .config (xml). If you are using "native" configuration elements or when you create your custom .config files you must set to every xml document a schema.

By default (in VS9 for example) all xml files use \Microsoft Visual Studio 9.0\Xml\Schemas\DotNetConfig.xsd but you can add more schemas to use.

Before assigning a schema you must create it.

To create a new Schema based on your own custom.config:

  1. open your custom config file
  2. in menubar XML->Create Schema
  3. save it

To assign your schema:

  1. open your custom config file
  2. in properties panel: click on the browse button [..]
  3. set the 'Use' column to your recently created schema

you can assign as many you want. or have one schema for all your different custom .config files

(Sorry, but my English is not so good)

2
votes

I think that you get the blue squiggles since the schema of your web.config file doesn't declare these custom config sections that you've 'broken out' into individual files.

In investigating this, I see that some of my solutions have the same issue, but the config sections that are provided from microsoft DON'T have the squiggles. eg: we have extracted the appsettings and connectionstrings out into their own files, and they don't get the squiggles, but our custom ones do.

I tried to view the microsoft schema at schemas.microsoft.com/.netconfiguration/v2.0, but I get a 404 when trying to download it.

What I'm trying to say is if you get a copy of the MS schema and alter it to include your external config files, you should be able to get rid of the dreaded squiggles!

HTH, Lance