将解决方案切换到VS 2010后编译器运行时错误

时间:2013-09-02 13:34:24

标签: asp.net .net visual-studio-2010

我们最近将我们的asp.net 3.5解决方案从VS 2008切换到VS 2010,同时仍然希望它在.net 3.5中(因为部署服务器仅在3.5上运行)

图书馆还可以,但网站引起了我们的问题。我们在每个aspx页面上得到的错误消息如下:

D:\WebSites\.....aspx: ASP.NET runtime error: Could not load type 'Microsoft.Build.Framework.ITaskItem2' from assembly 'Microsoft.Build.Framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

我发现编译器正在寻找的接口(ITaskItem2)仅在.net 4.0中可用,但是它一直在3.5汇编中寻找它,这显然是错误的。

我们试图找出这种差异的起源,但没有运气。

它显着阻碍了我们的工作,因为intellisense不适用于asp组件,也无法调试网页。

但即使在VS中发生此错误,页面在浏览器中显示时也能正常工作(使用IIS),因此这只是VS的问题。

如果你有任何想法,这里可能有什么问题,请告诉我。

由于

1 个答案:

答案 0 :(得分:1)

所以,经过大量的实验,我设法把事情搞定了。

解决方案是让VS为网站生成新的标准web.config并添加我们正在使用的一些额外选项..

旧的和新的web.config之间只有2个不同之处:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

已更改为

<runtime>
<assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">

不确定这是否会影响某些事情。

但更重要的是,在非工作的web.config中,<runtime>还有一个附加部分:

  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Build.Framework"
       publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
    </dependentAssembly>
  </assemblyBinding>

我不是web.config的大师,我不知道提供的部分有什么问题,但没有它,事情开始奇迹般地发挥作用。