我刚刚将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();
}
我使用AnyCPU
目标平台定位.Net Framework 4.7。如果有任何帮助,我正在使用win10-x64
RID。
每个Nuget包都是最新的。
有什么想法吗?我用谷歌搜索没有运气。
答案 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运行就像是必须摆脱所有的反复试验。和往常一样,您的里程可能会有所不同。