在机器上安装.net3.5构建的应用程序.net 3.5和4.0都安装了

时间:2017-02-06 12:24:40

标签: .net browser version

我们编写了一个使用.NET 3.5构建的应用程序,当我们在安装了.NET 4.5的计算机上运行它时,WPF会在IE浏览器上形成行为更改,这会导致一些问题,当我从中删除.NET 4时机器仍然有一个.net 3.5版本,问题解决了。如何在我的机器上安装.NET 4或更高版本并强制我的应用程序工作,就像安装了.net3.5一样。 我已将此部分添加到我的应用配置中,但它无法解决我的问题

 <startup>
      <supportedRuntime version="v2.0.50727"/>
      <supportedRuntime version="v4.0"/>
   </startup>

我发现尽管已经使用.net3.5构建了我的应用程序,但在浏览器演示文件中运行会在运行时加载.net4程序集。但我不知道为什么!以及如何使它加载.net3.5程序集。

应用程序清单中的依赖项部分是

     <dependency>
                   <dependentAssembly dependencyType="preRequisite"  allowDelayedBinding="true">
                   <assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime"   version="2.0.50727.0" />
                   </dependentAssembly>  
             </dependency>

但如果客户端系统上安装了.net4程序集,则会在运行时加载.net4声明!

2 个答案:

答案 0 :(得分:0)

无法帮助我解决问题?

我们的客户机安装了.net3.5和4,并且需要安装.net4,因为其机器上的其他应用需要.net4,问题是我们的应用程序是用.net3.5编译并部署的使用clickonce只需要.net3.5而不是.net 4!

据我所知,clickonce部署了在IE中托管的xbap应用程序使用presentationHost.exe进行托管,presentationHost加载.net的正确程序集版本,我不知道为什么presentationHost在我编译时加载了clr4库app .net3.5并明确地在所有配置文件和清单中提到我的应用程序依赖于clr2!

以下设置适用于我的应用的桌面版:

<startup useLegacyV2RuntimeActivationPolicy="true">
 <supportedRuntime version="2.0.50727"/>
</startup>

和桌面应用程序正确加载.net3.5库,但也安装了.net4(更高版本)。但是对于浏览器托管的客户端,此配置设置和我在清单文件中添加的其他设置不会阻止客户端加载更高版本的.NET框架,而.net4程序集将加载到应用程序域中,而我的应用程序只需要有.net3.5库加载不是4或更高版本!

答案 1 :(得分:0)

我解决了在我的应用清单中添加波纹管的问题。这迫使演示主机使用核心DLL的确切3.5版本

 <dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
      <assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="2.0.50727.0" />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
      <assemblyIdentity name="System.Core" version="3.5.0.0" publicKeyToken="b77a5c561934e089" language="neutral" processorArchitecture="msil" />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
      <assemblyIdentity name="WindowsBase" version="3.0.0.0" publicKeyToken="31bf3856ad364e35" language="neutral" processorArchitecture="msil" />
    </dependentAssembly>
  </dependency>