簡體   English   中英

無法從程序集 System.Web 加載類型“System.Web.HttpPostedFileBase”

[英]Could not load type 'System.Web.HttpPostedFileBase' from assembly System.Web

我正在開發一個有兩個項目的解決方案,一個是 .NET Core 3 項目,另一個是 .NET Framework 4.7.2 項目。 .NET Framework 4.7.2 項目有一個在方法上使用HttpPostedFileBase的類。

問題是,當我使用 Autofac 在我的 .NET Core 項目上注冊該類時,出現以下錯誤:

無法從程序集“System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”加載類型“ System.Web.HttpPostedFileBase ”。

我知道 .NET Core 3 上的 System.Web 上不存在HttpPostedFileBase ,所以我的猜測是,當我嘗試使用 Autofac 注冊該類時,所使用的 System.Web 是我的 .NET Core 項目中的一個,而不是.NET Framework 項目中的一個。 嘗試僅將來自其他項目的 System.Web 用於我的 .NET Core 項目是否可行?

我嘗試將 System.Web.dll 從另一個項目添加到我的 .NET Core 項目中,但出現錯誤:

發生了一個或多個錯誤。 引用無效或不受支持。

我希望這個答案可以幫助您走上正軌。

我想到了解決您的問題的幾個選項:

1.完全放棄.NET Framework

如果可能,將使用 .NET Framework 4.7.2 的項目更改為使用 .NET Standard,並完全放棄 .NET Standard 重寫有問題的方法。 這在某些方面是更簡單的選擇,我建議您盡可能采用它。

2. 同時面向 .NET Standard 和 .NET Framework

如果這是不可能的,因為某些問題,例如項目用於其他無法針對.NET Standard解決方案,您可以使該項目針對兩個平台。

您可以通過 VisualStudio 或直接在 csproj 文件中以較新的 csproj 格式編輯TargetFramework屬性(我強烈建議您使用某些向導將項目遷移到新格式)執行第二個選項。 然后,如果您使用的是.NET Framework 4.7.2.NET Standard對應版本,則您應該在 csproj 中的ItemGroup上添加條件以僅包含System.Web 。如果使用.NET Standard 然后使用.NET Standard再次編寫有問題的方法,但不要刪除舊方法。 相反,您應該使用#if編譯器指令讓編譯器選擇正確的。

您可以在下面找到具有新 csproj 格式的示例。 如果您使用舊的,您可以使用例如此向導來自動遷移。

<TargetFramework>net472</TargetFramework>

應改為 (mind s ):

<TargetFrameworks>net472;netstandard2.0</TargetFrameworks>

然后僅在使用net472時包含System.Web

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

后來對於 .NET Standard 也是如此。

最后一部分應該在 C# 代碼中完成:

#if NETFRAMEWORK
... method using **HttpPostedFileBase** ...
#elif NETSTANDARD
... its .NET Standard counterpart ...
#endif

上面使用的常量 - NETSTANDARD 和 NETFRAMEWORK 是上述平台的更具體版本的通配符。 你可以在這里找到它們

您可能被迫對相關方法的調用者做類似的事情。

如果這些事情沒有幫助,您可能需要檢查程序集綁定重定向(如果您有任何問題),因為我發布的這個問題可能不是唯一的。

祝你好運,我希望我的回答有任何幫助。

出於某種原因,當我注冊我正在談論的 Autofac 類時,就像這樣: builder.RegisterType() .EnableClassInterceptors().InterceptedBy(typeof(LogInterceptors), typeof(CacheInterceptor)); 然后刪除類攔截器並注冊類,如 builder.RegisterType(); ,然后錯誤消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM