从ASP.Net Core 1.1迁移到2.0

时间:2017-08-21 15:40:33

标签: c# asp.net asp.net-mvc asp.net-core asp.net-core-2.0

我刚刚将ASP.Net Core 1.1应用程序迁移到刚刚发布的新2.0版本。现在我得到以下异常:

  

System.BadImageFormatException:'无法加载文件或程序集   'dotnet-aspnet-codegenerator-design'或其依赖项之一。一个   尝试加载格式不正确的程序。'

在以下行(AddMvc)上抛出异常:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    ...
    services.AddMvc(options =>
        {
            options.Filters.Add(new MiddlewareFilterAttribute(typeof(LocalizationPipeline)));
        })
        .AddJsonOptions(options =>
        {
            // Maintain property names during serialization. See:
            // https://github.com/aspnet/Announcements/issues/194
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();
        })
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
        .AddDataAnnotationsLocalization();
}

nasty exception screenshot

我使用AnyCPU目标平台定位.Net Framework 4.7。如果有任何帮助,我正在使用win10-x64 RID。 每个Nuget包都是最新的。

有什么想法吗?我用谷歌搜索没有运气。

3 个答案:

答案 0 :(得分:6)

当我从 x86 切换到 x64 (从核心1.1升级到2.0后)时发生了同样的异常。

由于在运行时并不真正需要dotnet-aspnet-codegenerator-design,我删除了该引用。但是,Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv程序集发生了相同的异常。

幸运的是,这个问题与我没有改变 .NET核心运行时标识符(RID)的事实有关。这仍然是在win7-x86上设置的,所以我将它改为win7-x64并且可以加载Libuv的开发。

我希望dotnet-aspnet-codegenerator-design会有一些修复,因为脚手架控制器和视图可能需要依赖...

更新:Github上存在此问题(https://github.com/aspnet/Scaffolding/issues/601

答案 1 :(得分:0)

有一种依赖性被破坏的可能性。您可以使用诸如Everything(https://filehippo.com/download_everything/)之类的工具来搜索并查找损坏的依赖项。它很有可能会在此文件夹中的某个位置(C:\ Program Files \ dotnet \ shared)。找到它后,尝试搜索并重新下载它(很有可能,您会找到它的一个小工具),然后替换旧的\腐败的版本(一定要备份)。

如果在线查找依赖项时遇到麻烦,只需将项目发布到文件夹中,所有依赖项都将复制到该文件夹​​中。如果发布项目并运行dotnet PROJECTNAME.dll,但仍然出现相同的错误,则可能必须在Visual Studio上运行全新安装或修复。

我希望这可以节省很多时间,该错误可能需要一段时间才能调试。

答案 2 :(得分:0)

我在SmarterASP.NET托管上也收到此错误。我无法尝试此处建议的所有文件更新,但是找到了另一个解决方案,在此之前,我尝试编译为多个目标而没有成功。最终,当我将目标对准便携式设备时,一切都开始起作用。在Smarter上,它作为ASP.NET 2.2核心,可移植的框架相关部署现在运行良好。有时候,我发现让Core运行就像是必须摆脱所有的反复试验。和往常一样,您的里程可能会有所不同。