从.NET 3.5升级到.NET 4.0:是否有配置文件中断更改?

时间:2013-02-13 22:55:27

标签: .net .net-4.0

我们的可执行文件是针对.NET 3.5编译的。我们不拥有源代码,因此无法重新编译它。因此,为了让它与.NET 4.0一起运行,我们根据this page将其添加到配置文件中:

<startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>

现在,我们得到一个与配置文件相关的不同错误:

enter image description here

我怀疑.NET 4.0不太喜欢我们相当复杂的配置文件。为了验证这一点,我做了以下事情:

  • 创建了一个空白的.NET 3.5 WinForms exe
  • 在配置中添加了supportedRuntime,如上所示
  • 使用进程资源管理器验证它是否与.NET 4.0 DLL一起运行。

我开始简化复杂的配置文件以缩小问题的范围,到目前为止,我已经把它解决了。有谁知道问题可能是什么?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" />
   </startup>
   <configSections>   
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>
  <spring>
    <context type="Spring.Context.Support.XmlApplicationContext, Spring.Core" name="Default">
      <resource uri="config://spring/objects" />
    </context>
    <objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd" default-lazy-init="true">      
      <object id="Foo1" type="Foo.Bar1, Foo.Bar">
        <description>lorem ipsum</description>
      </object>
      <object id="Foo2" singleton="false" type="Foo.Bar2, Foo.Bar">
        <description>lorem ipsum</description>
      </object>
      <object id="Foo3" singleton="false" type="Foo.Bar3, Foo.Bar">      
        <description>lorem ipsum</description>
      </object>
      <object id="Foo4" type="Foo.Bar4, Foo.Bar">            
        <description>lorem ipsum</description>
      </object>
      <object id="Foo5" type="Foo.Bar5, Foo.Bar">            
        <description>
            lorem ipsum
        </description>
        <constructor-arg>
          <list element-type="Foo.IBar5, Foo.Bar">
            <ref object="Foo4" />
          </list>
        </constructor-arg>
      </object>
    </objects>
  </spring>

</configuration>

1 个答案:

答案 0 :(得分:1)

原来问题是 configSections 必须是配置的第一个孩子。

我通过将复杂的配置放入空白的WinForms配置文件,读取配置并查看抛出的异常的详细信息来解决这个问题。