我在 Visual Studio 2017(版本 15.7.1)中创建了一个新的 Service Fabric 应用程序,并使用 .Net Core 2.0 Stateful Service 模板添加了一个新服务。
当我尝试运行该服务时,它无法正确启动,我可以在诊断事件中看到以下异常:
Description='副本在 _Node_0 上打开期间发生多次故障。 API调用:IStatefulServiceReplica.ChangeRole(P);
错误= System.IO.FileNotFoundException(-2147024894) 无法加载文件或程序集“System.ServiceModel,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”。 系统找不到指定的文件。
我通过安装 Nuget 包修复了这个问题 System.ServiceModel.Primitives:
PM> Install-Package System.ServiceModel.Primitives
Windows 11 更新后可能有用的答案。
就我而言,更新 Windows 11 后,应用程序由于此错误而无法运行。我遇到错误无法加载文件或程序集 System.ServiceModel,版本 3.0.0.0。
经过长时间的研究,我卸载了.net框架并重新安装它,它工作了。
为此,我使用了程序/卸载程序/添加删除 Windows 功能。
取消选中所有 .net Framework 案例,然后单击“确定”按钮。 卸载过程后,我检查了相同的案例,然后单击“确定”按钮。
宾果游戏!
System.ServiceModel.Primitives 有一个我认为相当奇怪的错误。如果您使用的 DLL 具有 System.ServiceModel.Primatives 依赖项,那么您还必须将其安装为使用该 DLL 的项目中的引用。如果你不这样做,DLL 将不知道在哪里找到它,并且你会得到可怕的“无法加载文件或程序集...” 正如 Ragtimewilly 所指出的,您可以通过 Nuget 轻松添加引用。 可能有更好的方法来做到这一点 - 但通过 Nuget 添加它就可以了。
我必须安装 4.4.4 版本的 System.ServiceModel.Primitives。最新版本没有解决我的问题
安装包 System.ServiceModel.Primitives -版本 4.4.4
在同一解决方案中使用 .NET 8 和 .NET Framework 4.8 项目时,我遇到了相同的错误,并且这两个项目都引用了 .NET Framework 4.8 共享项目。
我必须将引用
System.ServiceModel.Primitives
的 .NET 8 NuGet 包从使用 v8 版本降级为使用最新的 v4 版本,以便所有项目最终都以相同版本的 System.ServiceModel.Primitives
为目标。
例如我必须在 .NET 8 项目中将
System.ServiceModel.Http
和 System.ServiceModel.NetTcp
NuGet 包从 v8.0.0 降级到 v4.10.3。 .NET Framework 4.8 项目已引用 NuGet 包的 v4.10.3。