无法从程序集System.Web加载类型'System.Web.HttpPostedFileBase'

时间:2019-12-27 20:17:15

标签: c# asp.net

我正在研究一个包含两个项目的解决方案,一个是.NET Core 3项目,另一个是.NET Framework 4.7.2项目。 .NET Framework 4.7.2项目具有一个在方法上使用 HttpPostedFileBase 的类。

问题是,当我使用Autofac在.NET Core项目上注册该类时,出现此错误:

  

无法从程序集中加载类型“ System.Web.HttpPostedFileBase ”   'System.Web,版本= 4.0.0.0,文化=中性,   PublicKeyToken = b03f5f7f11d50a3a'。

我知道 HttpPostedFileBase 在.NET Core 3的System.Web上不存在,所以我的猜测是,当我尝试向Autofac注册该类时,正在使用的System.Web是一个来自我的.NET Core项目,而不是来自.NET Framework项目。尝试仅将另一个项目中的System.Web用于我的.NET Core项目是否可行?

我尝试将其他项目中的System.Web.dll添加到我的.NET Core项目中,但出现错误:

  

发生一个或多个错误。该引用无效或不受支持。

2 个答案:

答案 0 :(得分:2)

我希望这个答案可以帮助您走上正确的轨道。

我想不出解决您问题的几种选择:

1。完全放弃.NET Framework

如果可能的话,使用.NET Framework 4.7.2更改项目以使用.NET Standard,并改写有问题的方法,完全放弃.NET Standard。从某些方面来说,这是更简单的选择,我建议您尽可能使用它。

2。同时定位.NET Standard和.NET Framework

如果由于某些问题(例如该项目用于无法定位myObj的其他解决方案中,则可以使该项目同时面向两个平台。

您可以通过VisualStudio或直接在csproj文件编辑.NET Standard属性中以较新的csproj格式进行第二种选择(强烈建议您使用某些向导将项目迁移到新格式)。然后,应在csproj的TargetFramework上添加条件,以仅在使用ItemGroup时包含System.Web,而在使用.NET Framework 4.7.2时包含.NET Standard。然后使用.NET Standard重新编写有问题的方法,但不要删除旧的方法。相反,您应该使用.NET Standard编译器指令使编译器选择正确的编译器。

下面您可以找到具有新csproj格式的示例。如果您使用的是旧版本,则可以使用THIS WIZARD自动迁移。

#if

应更改为(注意<TargetFramework>net472</TargetFramework> ):

s

然后仅在使用<TargetFrameworks>net472;netstandard2.0</TargetFrameworks> 时包括System.Web

net472

.NET Standard之后也是如此。

最后一部分应使用C#代码本身完成:

<ItemGroup Condition=" '$(TargetFramework)' == 'net472' ">
    <Reference Include="System.Web" />
</ItemGroup>

上面使用的常量-NETSTANDARD和NETFRAMEWORK是通配符,用于提到的平台的更特定版本。您可以全部找到它们HERE

您可能被迫对有问题的方法的调用者做类似的事情。

如果这些事情不能解决问题,您可能需要检查程序集绑定重定向,因为我所发布的此问题可能不是唯一的问题。

祝你好运,希望我的回答有任何帮助。

答案 1 :(得分:0)

由于某种原因,当我注册正在与Autofac讨论的类时,如下所示:builder.RegisterType().EnableClassInterceptors()。InterceptedBy(typeof(LogInterceptors),typeof(CacheInterceptor));然后删除类拦截器,并注册类似builder.RegisterType();的类。 ,然后错误消失了。