System.Net.Http缺失的程序集,.NET 4.7.2和SharePoint CSOM。

24 浏览
0 Comments

System.Net.Http缺失的程序集,.NET 4.7.2和SharePoint CSOM。

我目前正在遇到与“System.Net.Http”程序集相关的问题,这使我非常头疼。

在进一步之前,我在网上搜索了几个小时,阅读并尝试了几篇文章中提到的解决方案,例如以下文章:

显然,我缺少了某些东西,因为我不能解决这个问题。

基本上,我有一个由多个项目组成的解决方案,所有项目都针对.NET Framework 4.7.2。其中一个是简单的控制台应用程序,其他是类库项目。其中一个包含对SharePoint CSOM和Office Dev PnP的引用。

然而,每次调用以下行时...

context.ExecuteQuery();

...我会得到以下错误:

Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll
Message "Could not load file or assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified."

堆栈跟踪如下:

at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System.ServiceModel.Security.IWSTrustContract.Issue(Message message)
at System.ServiceModel.Security.WSTrustChannel.Issue(RequestSecurityToken rst, RequestSecurityTokenResponse& rstr)
at System.ServiceModel.Security.WSTrustChannel.Issue(RequestSecurityToken rst)
at OfficeDevPnP.Core.IdentityModel.TokenProviders.ADFS.UsernameMixed.RequestToken(String userName, String passWord, Uri userNameMixed, String relyingPartyIdentifier)
at OfficeDevPnP.Core.IdentityModel.TokenProviders.ADFS.UsernameMixed.GetFedAuthCookie(String siteUrl, String userName, String password, Uri userNameMixed, String relyingPartyIdentifier, Int32 logonTokenCacheExpirationWindow)
at OfficeDevPnP.Core.AuthenticationManager.<>c__DisplayClass42_0.b__0(Object oSender, WebRequestEventArgs webRequestEventArgs)
at Microsoft.SharePoint.Client.ClientRuntimeContext.OnExecutingWebRequest(WebRequestEventArgs args)
at Microsoft.SharePoint.Client.ClientContext.GetWebRequestExecutor()
at Microsoft.SharePoint.Client.ClientContext.GetFormDigestInfoPrivate()
at Microsoft.SharePoint.Client.ClientContext.EnsureFormDigest()
at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
at SP19ProvisioningAppDomain.Repository.WebRepository.ProvisionWeb(String template) in ... line 105

我使用NuGet安装了Microsoft.SharePoint.Client、OfficeDevPnP.Core和SharePointPnPCore2019。

起初,在“packages.config”文件中只有对“System.Net.Http”的引用。所以我在“app.config”文件中尝试了以下事情:

// 1


// 2


// 3


// 4

在“.csproj”文件中,还有以下行:

    ..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll
    True
    True

我尝试过与这些代码玩耍,但没有更多的成功。

我还尝试通过软件包管理器删除“System.Net.Http”,并通过“引用/框架”添加它,但由于我根本无法勾选复选框,卸载软件包引发了依赖项错误。我删除了“bin”和“packages”文件夹,卸载并重新安装软件包,消除NuGet缓存,重启了Visual Studio数千次,彻底搞乱了我的解决方案,进行了许多“NuGet restore”以回到起点。

说实话,我以前从未遇到过这个错误,有点困惑。我想不出我哪里出了问题。我可以补充一下,我正在使用Visual Studio Professional 2019,16.5.4。

有人有想法或能给我帮助吗?不胜感激。

最好的问候,

编辑1

根据Raju Joseph的答案,我尝试了以下几点:

  • 卸载项目的所有NuGet软件包
  • 删除\"bin\"和\"obj\"文件夹
  • 清理\"app.config\"和\"packages.files\"
  • 清理\"csproj\"文件
  • 将所需的DLL复制到另一个文件夹,并手动将其添加为引用

不幸的是,它并没有更好地工作。

所以,我又清理了一次,重新安装了NuGet软件包。我注意到的是,在“引用”下,“System.Net.Http”的路径指向我的本地“Program Files”,而我在我的“csproj”文件中有以下几行:

  ..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll
  True
  True
 

我有另一个“旧”的项目,目标是.NET Framework 4.6.1,几乎有相同的依赖关系,在这个项目中,“System.Net.Http”的路径设置为我的项目的“package”文件夹。

在我的当前项目中,每次我尝试更改“System.Net.Http”的引用路径并从我的“packages”目录中选择DLL时,它都将路径设置到“Program Files”。

我还尝试在另一台机器上构建和运行该项目,结果相同。

我困惑了......

编辑2

我决定复制整个解决方案,然后清理每个项目,使它们针对.NET Framework 4.6.1。目前,似乎我已经摆脱了这个错误。有人有解释吗?

解决方案-解决办法

经过几次测试,我确认为整个解决方案回到.NET Framework 4.6.1似乎可行。所有我的项目都可以编译,单元测试也可以运行,并且我可以在我的代码中使用SharePoint 2019 CSOM和SharePoint PnP Core而不会出现任何错误。

这可能不是一个好的解决方案,但在我的情况下,这是可以接受的。

admin 更改状态以发布 2023年5月21日
0
0 Comments

解决方案/解决办法是回到.NET Framework 4.6.1。有关更多信息,请参见初始问题。

0
0 Comments

看看这个GitHub代码库。几年前,我必须使用SharePoint CSOM和.NET Core工作,我面临着类似的问题。请注意,该代码使用的是.NET Core而不是.NET Framework。希望它能有所帮助。

0