![](/img/trans.png)
[英]Could not load type '…' from assembly 'System.Web, …'
[英]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.