none
Issue deploying WCF service to IIS 6 in non-updateable mode

    Question

  • I have been working for the last week trying to get to the point where I could reproduce an error.  The scenario is actually very simple.  All I want to do is be able to deploy WCF services using the ASP.NET pre-compilation non-updateable model where the implementation is separated from the web application project (to help facilitate unit testing).  Ok maybe it isn’t that simple J 

     

    I am working with VS.NET 2008 and .NET 3.0.  I have been able to isolate this down to an issue with deploying to a Win 2K3 server in IIS 6 using specifically a virtual directory to host the application root.  When I use a new web site in IIS 6 it works fine but as soon as I move the binaries over to a virtual directory I get a “Value cannot be null.  Parameter name: key” error coming from the System.ServiceModel.Activation.MetabaseSettingsIis.GetTransportSettings(String VirtualPath).  It appears to be attempting to lookup the settings in a dictionary during activation and it can’t seem to find anything for the virtual path being sent in (again … only when I’m in non-updateable mode).

     

    Also,  as soon as I deploy using the updateable mode (where the .svc file gets markup) it works fine.  I have screenshots, trace files, and repro steps that I can send if you are able and willing to help.  Any and all ideas are appreciated.

     

    Tuesday, June 03, 2008 1:39 PM

Answers

  • I ended up solving this issue (after numerous attempts to hack the .compile files and significant grinding of teeth),  it turns out the whole “Publish Web Site” deployment model within VS.NET 2008 hinges on the name of the web application project directly mapping to the virtual directory name.  I had been doing some manual hacks to the .compile file to make it work in the default web site which was essentially giving me a false positive.  Now it works just fine everwhere (IIS 6 / IIS 7) as long as I make sure the customString attribute maps to the IIS virt-dir.  Of course,  this does mean these files are not very portable.  If you want to move them from one virt-dir to another then you’ll need to manually change the bolded portion of the customString below or you’ll see that error I have listed below.

     

    For example:

    I have a virtual directory (web application in IIS 7) under a website called “WCFTest”.  If your web application project is named WCFTest you’re fine but if it isn’t you’ll need to go in and update it manually (or setup a custom build script that changes the settings in the aspnet_compiler).  Here’s what my Service.svc.compile file looks like that works (the key portion is in bold).

     

    <preserve resultType="5" virtualPath="/WCFTest/Services/Service.svc" hash="55fe3ce3" filehash="38d428ec94f6" flags="110001" customString="/WCFTest/Services/Service.svc||ServiceImplementation.Service|System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|ServiceImplementation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null|System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|ServiceImplementation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">

        <filedeps>

            <filedep name="/WCFTest/Services/Service.svc" />

        </filedeps>

    </preserve>

     

    Also worth mentioning is a bit of a headache when doing a precompile on a box that has .NET 3.5 installed.  The issue is with all those assemblies you see in the customString.  If you’ve installed .NET 3.5 you’ll have System.WorkflowServices 3.5 and System.ServiceModel.Web 3.5 in the list which blows up when you deploy to a box that only has .NET 3.0 installed.  Obviously the targeting feature in VS.NET 2008 does not ensure that invalid assemblies end up included in the aspnet_compiler operation.  All you have to do to fix this is go into the %system drive%\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config and remove the previously mentioned assemblies from the list in the <assemblies> node.

    Wednesday, June 04, 2008 3:49 PM

All replies

  • I ended up solving this issue (after numerous attempts to hack the .compile files and significant grinding of teeth),  it turns out the whole “Publish Web Site” deployment model within VS.NET 2008 hinges on the name of the web application project directly mapping to the virtual directory name.  I had been doing some manual hacks to the .compile file to make it work in the default web site which was essentially giving me a false positive.  Now it works just fine everwhere (IIS 6 / IIS 7) as long as I make sure the customString attribute maps to the IIS virt-dir.  Of course,  this does mean these files are not very portable.  If you want to move them from one virt-dir to another then you’ll need to manually change the bolded portion of the customString below or you’ll see that error I have listed below.

     

    For example:

    I have a virtual directory (web application in IIS 7) under a website called “WCFTest”.  If your web application project is named WCFTest you’re fine but if it isn’t you’ll need to go in and update it manually (or setup a custom build script that changes the settings in the aspnet_compiler).  Here’s what my Service.svc.compile file looks like that works (the key portion is in bold).

     

    <preserve resultType="5" virtualPath="/WCFTest/Services/Service.svc" hash="55fe3ce3" filehash="38d428ec94f6" flags="110001" customString="/WCFTest/Services/Service.svc||ServiceImplementation.Service|System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|ServiceImplementation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null|System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a|ServiceImplementation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">

        <filedeps>

            <filedep name="/WCFTest/Services/Service.svc" />

        </filedeps>

    </preserve>

     

    Also worth mentioning is a bit of a headache when doing a precompile on a box that has .NET 3.5 installed.  The issue is with all those assemblies you see in the customString.  If you’ve installed .NET 3.5 you’ll have System.WorkflowServices 3.5 and System.ServiceModel.Web 3.5 in the list which blows up when you deploy to a box that only has .NET 3.0 installed.  Obviously the targeting feature in VS.NET 2008 does not ensure that invalid assemblies end up included in the aspnet_compiler operation.  All you have to do to fix this is go into the %system drive%\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config and remove the previously mentioned assemblies from the list in the <assemblies> node.

    Wednesday, June 04, 2008 3:49 PM
  •  

    "...the whole “Publish Web Site” deployment model within VS.NET 2008 hinges on the name of the web application project directly mapping to the virtual directory name."

     

    You Sir, are a Legend.

     

    I have wasted > 4hrs trying to work out what the *** I was doing wrong with publishing my Web Service Host.

     

    I've been playing with the Service Factory Modelling Edition and the recommended naming of the host project (in the accompanying walk thru) was "xxx.scm.svc.wcf.Host" which I decided to follow, but I was using the VS2008 publish wizard specifying an IIS virtual web of just "xxx" when deploying to a different server.  As soon as I read your post and published it as "xxx.scm.svc.wcf.Host", all my problems went away.

     

    *sigh*, that little point might have been beneficial to add to the walk through notes or VS help... maybe it is in there somewhere, but I didn't see it.

     

    Thanks again,

    Kev.

    Tuesday, July 15, 2008 5:02 AM
  • Thanks Tom Fuller,
    You saved a lot of time for me too.

    I have solved the problem by doing as you suggested on local IIS.

    Now i am facing a problem while hosting it on Godady . I get an xml error saying :

    -----
    XML Parsing Error: no element found
    Location: http://mydomain.com/myWCFService.svc
    Line Number 1, Column 1:
    -----

    any idea what could be wrong sir ?


    ShadowMan : The Lord of Dead Side
    Thursday, November 20, 2008 11:04 AM
  • Hello Tom

    Can you please help me out on this Issue.

    I am getting this error when I am trying to browse my service .svc file after the installation on the server.

    I got this error 

    Could not load file or assembly 'Microsoft.ServiceModel.Channels, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. 

    FileNotFoundException: Could not load file or assembly 'Microsoft.ServiceModel.Channels, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.] System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName) +0 System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) +64 System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) +58 System.Type.GetType(String typeName, Boolean throwOnError) +59 System.ServiceModel.Configuration.BindingsSection.UpdateBindingSections() +240 System.ServiceModel.Configuration.BindingsSection.get_Properties() +19 System.Configuration.ConfigurationElement.Reset(ConfigurationElement parentElement) +38 System.Configuration.RuntimeConfigurationFactory.CreateSectionImpl(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader) +128 System.Configuration.RuntimeConfigurationFactory.CreateSectionWithFullTrust(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader) +50 System.Configuration.RuntimeConfigurationFactory.CreateSection(Boolean inputIsTrusted, RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader) +38 System.Configuration.RuntimeConfigurationRecord.CreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader) +69 System.Configuration.BaseConfigurationRecord.CallCreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader, String filename, Int32 line) +67 [ConfigurationErrorsException: An error occurred creating the configuration section handler for system.serviceModel/bindings: Could not load file or assembly 'Microsoft.ServiceModel.Channels, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.] System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult) +202 System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject) +1061 System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) +1431 System.Configuration.BaseConfigurationRecord.GetSection(String configKey, Boolean getLkg, Boolean checkPermission) +56 System.Configuration.BaseConfigurationRecord.GetSection(String configKey) +8 System.Web.Configuration.HttpConfigurationSystem.GetSection(String sectionName, VirtualPath path) +55 System.Web.Configuration.WebConfigurationManager.GetSection(String sectionName, String path) +58 System.ServiceModel.Configuration.ConfigurationHelpers.UnsafeGetSectionFromWebConfigurationManager(String sectionPath, String virtualPath) +37 System.ServiceModel.Configuration.ConfigurationHelpers.UnsafeGetAssociatedSection(ContextInformation evalContext, String sectionPath) +154 System.ServiceModel.Configuration.ServicesSection.UnsafeGetSection() +25 System.ServiceModel.Description.ConfigLoader.LookupService(String serviceConfigurationName) +16 System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, String configurationName) +24 System.ServiceModel.ServiceHostBase.ApplyConfiguration() +69 System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses) +190 System.ServiceModel.ServiceHost.InitializeDescription(Type serviceType, UriSchemeKeyedCollection baseAddresses) +32 System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses) +139 System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(Type serviceType, Uri[] baseAddresses) +28 System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +331 System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +11656092 System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +42 System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +479

    Can you please help me in this all Issue

    Thanks In advance
    Takecare Bye


    Swapnil S
    Tuesday, February 17, 2009 1:17 PM
  • A better solution would be to use "~" instead of the virtual path. I've tested this and it works just fine. For the previous example, the .compile file would then have the following content:

    <preserve resultType="5" virtualPath="/WCFTest/Services/Service.svc" hash="55fe3ce3" filehash="38d428ec94f6" flags="110001" customString="~/Services/Service.svc||ServiceImplementation.Service|System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b...

    This can become a custom build step in TFS with a grep like utility that does the search & replace.

    • Proposed as answer by incola Monday, August 31, 2009 12:49 PM
    Thursday, August 06, 2009 7:56 AM
  • Last night I had the 'Value cannot be null.  Parameter name: key' error for hours and hours. Last thing I changed were the NTFS permissions on disk. From the root of the disk I added the NETWORK SERVICE, ASPNET and IUSR_<compname> accounts with default permissions. Then went to bed, this morning it works.

    I had an WCF 3.5 service, hosted in IIS 6 on Windows Server 2003 Std. The service is being called from an ASP.NET web application (.NET 3.5). I used the http://wcfextras.codeplex.com/ extension to use SOAP headers.

    Wednesday, November 04, 2009 10:25 AM
  • Tom, thank you for the post. Very helpful and saved me tons of time.

    I did not quite like the idea of parsing compiled file (many reasons, mostly because I will have have to remember to explain new developers why on earth it's doing this :)). We also do not use Publishing Wizard, as was mentioned in this thread by KevMan - we use precompile tool aspnet_compiler.exe. But KevMan's post gave me an idea to specify -v switch for precompilation tool with correct name of the virtual folder, and this did the trick:

    aspnet_compiler.exe -p whaveristheprojectname -v WCFTest targetfolder

    service.svc.XXXXXXXX.compiled file will have the correct "prefix" /WCFTest in it's customString.

     

     

    • Proposed as answer by Rado Buransky Tuesday, January 04, 2011 12:41 PM
    Wednesday, April 28, 2010 4:05 PM
  • Vary Nice,I'm Test It and Resolved my problem.

    i was registered WCF in IIS and Configure my Site but give an error like this

    The resource cannot be found.

    Server Error in '/' Application.

    The resource cannot be found.

    Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.

    Requested URL: /xSMS_Server.svc


    Version Information:  Microsoft .NET Framework Version:2.0.50727.3607; ASP.NET Version:2.0.50727.3082

     

    then i see my event viewer to get complete error message

    Event Type:    Error
    Event Source:    System.ServiceModel 3.0.0.0
    Event Category:    WebHost
    Event ID:    3
    Date:        5/3/2010
    Time:        4:54:57 PM
    User:        NT AUTHORITY\NETWORK SERVICE
    Computer:    SW-DEV0
    Description:
    WebHost failed to process a request.
     Sender Information: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/56774454
     Exception: System.ServiceModel.ServiceActivationException: The service '/xSMS_Server.svc' cannot be activated due to an exception during compilation.  The exception message is: The relative virtual path 'xSMS_Server.svc' is not allowed here.. ---> System.ArgumentException: The relative virtual path 'xSMS_Server.svc' is not allowed here.
       at System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options)
       at System.Web.VirtualPathUtility.ToAppRelative(String virtualPath, String applicationPath)
       at System.ServiceModel.Activation.MetabaseSettingsIis.GetTransportSettings(String virtualPath)
       at System.ServiceModel.Activation.MetabaseSettingsIis.GetAccessSslFlags(String virtualPath)
       at System.ServiceModel.Activation.MetabaseSettings.GetAllowSslOnly(String virtualPath)
       at System.ServiceModel.Activation.HttpHostedTransportConfiguration.GetBaseAddresses(String virtualPath)
       at System.ServiceModel.Activation.HostedTransportConfigurationManager.InternalGetBaseAddresses(String virtualPath)
       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)
       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)
       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)
       --- End of inner exception stack trace ---
       at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
     Process Name: w3wp
     Process ID: 7236

    For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.


    by this solution i changed the compiled file in bin folder and resolved this error (remove the bold string)

    customString="/xSMS_Server /xSMS_Server.svc||xSMS_Server|System.EnterpriseServices, Version=2.0.0.0, Culture=neutral,

     

    Thanks a lot

    Monday, May 03, 2010 12:43 PM
  • hi,

    i'm facing a similar problem hope you guys can help. heres whats happening

    we've a WCf service which runs fine locally, even when we publish and host the service for awhile its up and running but after a few hits it throws the service activation excpetion... details are as below ...

    WebHost failed to process a request.

     Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/19886533

     Exception: System.ServiceModel.ServiceActivationException: The service '/Infosys.DSM.Services.Host/UserManagementService.svc' cannot be activated due to an exception during compilation.  The exception message is: The specified module could not be found. (Exception from HRESULT: 0x8007007E). ---> System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

       at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)

       at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)

       at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

       at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

       at System.Reflection.Assembly.Load(String assemblyString)

       at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)

       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)

       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)

       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)

       --- End of inner exception stack trace ---

       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)

       at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath)

     Process Name: w3wp

     Process ID: 7328

    once this error comes up , the only way out is to clear the temporary asp.net files for the hosted service and run it again, and it  works like magic!

    my question is whats exactly happening such that the .svc.compiled files are getting overwritten with the wrong CUSTOM STRING ?

    tt works fine when we publich and host it the first time

     

    TIA!

    Thursday, July 15, 2010 5:43 AM
  • Hi,

    Frankly, I think it is borderline insane that Microsoft *never learns* from the doubtless many thousand hours wasted every day all over the planet because they do not care to (a) stop making unrealistic assumptions (the name will always be the same) and (b) don't code so that they *TEST* the assumptions that they end up making, leading to an early failure and an *understandable* error description.

    In a case like this, why doesn't the tool test if the names ARE the same, and abort with a logical error if they are not?

    I am sitting right now with a problem that (as far as I can see) is unrelated to this, but again the cause is laziness by people who make stuff that thousands of others have to fight with afterwards. I'm trying to add a service reference and get an error message informing me that "Microsoft.ServiceModel.Channels" or one of its dependencies cannot be found - the system cannot find the file specified. I do have the correct version in the GAC (version and public key tokens match), so I'm thinking it must be one of the dependencies. But the infuriating thing is that I know the code that gives the error must know exactly what it was looking for and where, but the dev who wrote it didn't bother to use one minute longer in order to give us an acceptable level of user-friendliness.

    I mean, seriously, how can Microsoft be so sloppy? It has got to come right back at them and create (a) frustrated devs, and (b) tons of extra work to explain and fix all the problems that ensue.

    In general, I think the experience of developing with Microsoft's tools can be characterized like this: It is pretty great when everything works as it should. It is all too easy to do something that makes it not work, because the "need-to-know basis" approach and preference for "magic" means we often have very limited knowledge about what's going on under the hood. And if things have gone wrong, the tools - with the exception of the compiler - hardly ever provide any real help in getting wrongs righted again.

    This whole "happy go lucky" way is encouraged by MS themselves, and may be necessary since modern software is very complex, so that we do depend on using abstraction layer upon abstraction layer. But PLEASE, try to TEST what happens when you do something you SHOULD NOT, see how obvious or not it is what is wrong (or what you'd have to know in order for it to be obvious), see how easy it would be to detect such errors and either prevent them or help correct them. And whenever something is missing, state what it is and where you looked for it.

    I accept that it's an imperfect world and it's possible to mess things up. But it drives me nuts when the tool withholds the information I need in order to figure out what is wrong. I know it has the information, it just won't show it to me!

    Monday, February 20, 2012 2:04 PM