依赖于框架程序集" System.Runtime,Version = 4.0.10.0,"这在目前的目标框架中无法解决

时间:2014-11-13 21:21:11

标签: asp.net .net unity-container tfsbuild .net-4.5

TFS 2013 - Build:ASP.Net 4.5.1网站我收到此错误:

warning MSB3268: The primary reference "C:\Builds\2\MyProj\Web1_Main\bin\MyProj1.dll"
 could not be resolved because it has an indirect dependency on the framework assembly 
"System.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which
 could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.5.1". To resolve this problem, either remove the reference 
"C:\Builds\2\MyProj\Web1_Main\bin\MyProj1.dll" or retarget your application to a framework 
version which contains "System.Runtime, Version=4.0.10.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a".

最初使用Unity 1.0.0.0的所有项目和网站都是4.0。我将其升级到4.5.2。此外,上述错误中的MyProj1引用了Unity,我也将其升级到3.5.1。

阅读本文:https://unity.codeplex.com/workitem/12756 构建服务器已在变通方法中指向更新的4.5.2。

所以我降级到4.5.1,但仍然收到错误。

  • 通过Visual Studio 2013在本地构建解决方案。

  • 独立的类库项目在TFS中构建得很好但是当MyProj被添加为我的网站的引用时,它就会失败。

有什么想法吗?

升级时是否需要除TragetFramework settign之外的任何web.config更改?

3 个答案:

答案 0 :(得分:2)

实际上抱歉,我不认为" assemblyBinding"有助于。 这似乎是known bug。它尚未得到解决。使用Unity 3.5,您可以使用.NET 4.5.1而不是4.5.2。 因此,一种选择是重新定位到.NET 4.5.1并查看问题是否消失,如果这是一个选项。

P.S。 您也可以尝试.NET Framework 4.5.2 Developer Pack。但有些人提到它不起作用。

答案 1 :(得分:2)

由于我的项目依赖于其他一些项目,我不得不将Unity升级到3.5,这个错误又来了。这一次,终于搞定了。

这个帮助了我:http://devsilos.blogspot.com/2014/10/msb3268-while-targeting-aspnet-web-site.html

解决方案我复制了构建中抱怨的所有文件:

C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.2 \ Facades

C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.2

以下链接中的解释如果以后出于任何原因导致其失效:

  

更深入的检查揭示了以下有趣的事实:   aspnet_compiler由于某种原因没有考虑到.dll-s   位于4.5程序集的Facade目录下(C:\ Program   文件(x86)\参考   大会\微软\ Framework.NETFramework \ V4.5 \外立面)。它看起来   仅在C:\ Program Files(x86)\ Reference下   组件\微软\ Framework.NETFramework \ V4.5

     

因此,整个事情都因为System.Threading.Tasks而失败   和System.Runtime .dll-s在Facades目录下,而不是   在v4.5内。

     

现在的解决方案:

     
      
  • 只需将缺少的.dll-s从Facade复制到v4.5即可   目录。
  •   
  • 在.sln文件中将TargetFrameworkMoniker设置为4.5.1。最正确   语法如下:TargetFrameworkMoniker =   " .NETFramework,版本%3Dv4.5.1"
  •   
     

在这种情况下会发生的事情是aspnet_compiler没有   认识到所需框架的确切版本并尝试   尽可能使用GAC。如果4.5是安装的最高版本   在构建机器上我认为它应该可以工作。

答案 2 :(得分:0)

我们最近遇到了一个与升级到目标.NET 4.5的网站类似的问题,并且最初遵循了gbs's answer中的解决方案。

在我们的案例中,我们按照这种模式发出了几条警告:

  

<项目名称> .metaproj:警告MSB3268:无法解析主要参考“<项目参考> .dll”,因为它对框架程序集“System.Runtime,Version = 4.0.0.0具有间接依赖性” ,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“无法在当前目标框架中解析。 ” .NETFramework,版本= V4.5" 。要解决此问题,请删除引用“< project reference> .dll”或将应用程序重新定位到包含“System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”的框架版本。

我们随后发现,如果您创建一个面向4.5.x的新网站(文件>新建>网站...)并选择 ASP.NET空网站模板,包含 Microsoft.Net.Compilers 。将此软件包添加到我们的站点解决了该问题,而无需触及参考组件。

在最初的两个解决方案中,复制文件导致构建成功但存在维护问题,更改TargetFrameworkMoniker(4.5.3而不是4.5.1)会产生不同的构建错误,并且是一个脆弱的解决方案。