我正在我的应用中开发webApi。我有一个奇怪的问题。我尝试在独立的控制台应用程序中执行此项目,一切运行良好。我的问题是当我尝试将web api加载到另一个大型应用程序中时。我收到了这个错误:
无法加载文件或程序集“Microsoft.Owin,Version = 3.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
这是我使用它的类:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll); //HERE IS THE PROBLEM
HttpConfiguration configuration = new HttpConfiguration();
configuration.Routes.MapHttpRoute(
name: "TestApi",
routeTemplate: "test/{controller}/{id}",
defaults: new {id = RouteParameter.Optional}
);
app.UseWebApi(configuration);
}
}
我调试了,问题出在我使用app.UserCors(CorsOptions.AllowAll)
函数时。我使用 Nuget 包管理器安装了Microsoft CORS包,我尝试更新它但仍然出现此错误。我在这里搜索Can't load System.Web.Cors assembly after call to Microsoft.Owin.Cors,但解决方案对我不起作用。
我有这个app.config文件:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="3.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Cors" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</assemblyBinding>
问题可能在System.Web.Cors中?我有点失落。
答案 0 :(得分:2)
在您的配置中,您说
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
</dependentAssembly>
这意味着您使用的是Microsoft.Owin版本2.0.2.0 但是你的一些代码(我认为是IAppBuilder的实现)要求&#34; Microsoft.Owin,Version = 3.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35&#34;
如果你使用NuGet,升级包,如果没有 - 你应该下载3.0.1.0版本,更新参考和更改配置文件