Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do I randomly get a "error to use section registered as allowDefinition='MachineToApplication'" when building an MVC project?

I have seen a few questions on SO about a similar error when deploying a website, but I seem to randomly get this error when building an ASP.NET MVC website in Visual Studio. Performing a clean usually fixes it, but is there any way to avoid this completely?

It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS. d:...\obj\debug\package\packagetmp\web.config

Note that it is complaining about the root web.config, not the one from the Views subdirectory.

like image 310
Jedidja Avatar asked Jan 27 '10 13:01

Jedidja


2 Answers

I assume you're using the publish feature. I'm getting this error when using publish to a file directory.

Publishing your app creates a temporary copy of your application in the \obj\debug\package\packagetmp\web.config directory.

That web.config confuses the IDE which thinks it is an application, but its not in a virtual directory so you get the error.

Workaround:

It's a simple workaround to add this to a pre-build command:

 del "$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config"

Failed workarounds:

  • Changing the directory for 'Location where package will be created' under 'Package/Publish Web' settings doesn't seem to have an effect - even if you get clever and try to put it outside the project root with ......

  • Creating an actual virtual directory in IIS for 'PackageTmp' didn't fix it either!

CONNECT ISSUE:

http://connect.microsoft.com/VisualStudio/feedback/details/503254/web-config-in-package-folder-makes-it-impossible-to-compile-debug

I hope they fix this in the RC!

like image 138
Simon_Weaver Avatar answered Sep 28 '22 05:09

Simon_Weaver


I was unable to get the other workaround to work, but the following pre-build event seemed to work for me:

rmdir /s /q "$(ProjectDir)obj\Debug\Package"
rmdir /s /q "$(ProjectDir)obj\Debug\TransformWebConfig"
rmdir /s /q "$(ProjectDir)obj\Release\Package"
rmdir /s /q "$(ProjectDir)obj\Release\TransformWebConfig"
like image 30
Mike Avatar answered Sep 28 '22 07:09

Mike