Web发布找不到Microsoft.Build.Framework。

问题描述 投票:0回答:1

我正在使用VS2017与我从另一个开发人员那里继承的ASP.NET项目。我已经将发布功能设置为发布到文件夹。直到现在,这一切都很好。

之前的开发人员使用的是EntityFramework,不过当我拿到项目的时候,所有的引用都断了,所以我不得不拼凑出什么版本。我目前用的是6.2.0,一切正常。他显然是使用了自动迁移功能。我继续使用了这个功能,但也遇到过几次不得不启用数据丢失的情况。我真的不想这样做,所以建议的路径是启用迁移并添加实际迁移。我不是OR Mappers的新手,但我是EF的新手,所以迁移对我来说很陌生。事实上,要想让这些东西按照文档中所说的方式工作,是一场艰苦的战斗(见 这条)

所以,现在我已经到了拥有初始迁移数据的地步。似乎下一步就是要把这个发布到我们的开发服务器上,然后再发布到我们的生产服务器上。所以,由于我之前已经在这个项目中使用过很多次发布功能,我想它应该可以正常工作。好了,现在不是这种情况,由于我做了改变,让EF迁移工作。

发布一直到做这个事情。

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p 
C:\Users\Dan\Documents\Source\Repos\web- 
app\WebApp\obj\Release\AspnetCompileMerge\Source -u 
C:\Users\Dan\Documents\Source\Repos\web- 
app\WebApp\obj\Release\AspnetCompileMerge\TempBuildDir 

/global.asax(1,0): Error ASPPARSE: Could not load file or assembly 
'Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system 
cannot find the file specified.

ASPNETCOMPILER(0,0): Error ASPRUNTIME: Could not load file or assembly 
'Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system 
cannot find the file specified.

第一件让我觉得有趣的事情是,为了让迁移工作,我必须安装Microsoft.Build.Framework 15(具体来说,我用nuget安装了15.1.1012,然后尝试更新到最新的版本,现在是15.8.166)。看来这不仅仅是一个巧合,而是错误中的同一个库的不同版本。

我看到有人提到需要编辑devenv.exe.config将相对路径改为绝对路径(此处),但这并没有帮助。

我在GAC中验证了4.0.0.0在那里。显然,14.0.0.0.0也在。据我所知,小于15的安装版本应该在GAC中。

我确保Microsoft.Build.Framework被添加(通过nuget)到我的web应用项目以及有EF上下文和迁移的项目中。Microsoft.Build.Framework的版本15在这两个项目中都被列为参考,并自动设置为复制本地。

我试着将我的web应用中引用的版本改为4.0.0.0,最初将Copy Local设置为false。没用。把4.0.0.0的引用改为Copy Local。这次,我遇到了一个单一的错误的。

Could not load file or assembly 'Microsoft.Build.Framework, 
Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one 
of its dependencies. The located assembly's manifest definition does not 
match the assembly reference. (Exception from HRESULT: 0x80131040)

现在,我的想法是,既然它看起来像 多个版本参与, 也许它应该处理 绑定重定向。我很少处理绑定重定向,所以我不是什么专家,但我确实看了一下web.config,似乎有些东西(我假设Nuget安装的Microsoft.Build.Framework 15)已经输入了以下内容。

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
  </dependentAssembly>

所以,考虑到4.0.0.0在GAC中,考虑到有一个重定向,我相信会将任何4.0.0.0的引用重定向到15.1.0.0,为什么我会得到无法找到4.0.0.0的错误?是不是我遗漏了什么?我假设这一定与aspnet_compiler.exe在发布时做的某些事情有关,因为我可以在我的开发机上正常构建和测试应用程序。

c# asp.net entity-framework visual-studio-2017
1个回答
0
投票

这是一个微软包的问题,微软似乎会逐步停止对旧版Nuget的支持。这个解决方案对我来说是有效的。问题消失了,现在构建成功。

在你的 Azure Build Pipeline > NuGet tool installer 彳亍 Version of NuGet.exe to install 到一个较新的版本,如5.4.0。

查看Nuget的最新 ReleasedAndBlessed 版本于 https:/dist.nuget.orgtools.json。.


0
投票

在我的例子中,从web.config中删除bindingRedirect,然后安装最新的nuget for Microsoft.Build.Framework就像一个魅力。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.