在 .NET Core 项目中找不到 System.ServiceModel
Posted
技术标签:
【中文标题】在 .NET Core 项目中找不到 System.ServiceModel【英文标题】:System.ServiceModel not found in .NET Core project 【发布时间】:2017-08-07 10:43:36 【问题描述】:我有一个 .NET Core xUnit 项目。我正在尝试从中调用 WCF 服务,但出现以下异常:
System.InvalidOperationException occurred
HResult=0x80131509
Message=An error occurred while loading attribute 'ServiceContractAttribute' on type 'IMyContract'. Please see InnerException for more details.
Inner Exception 1:
FileNotFoundException: Could not load file or assembly 'System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. The system cannot find the file specified.
它适用于具有相同 Nuget 包 System.ServiceModel.Http.4.3.0
的 Framework 4.7 项目。
【问题讨论】:
@silkfire 我担心这一点。这在任何地方都有记录吗?我可以在不同的框架中安装相同的包并获得不同的功能集,这太疯狂了。 @silkfire 如果这是答案,请随意放下它。 请参阅Microsoft's .NET API Reference 网站,了解 .NET Core 支持的内容以及仅限 .NET Framework 的内容 @BanksySan 显然,关于它已从主框架本身中删除的事实,我似乎是正确的;考虑到这一点,很遗憾我说没有解决方案,而事实上微软已经在 NuGet 上提供了相关程序集作为可选包。随意将我接受的答案更改为以下投票最多的答案。 或者只是在终端窗口中运行它(dotnet add package System.ServiceModel.Primitives) 【参考方案1】:Microsoft 现在已将相关程序集作为包提供在 NuGet 上。
System.ServiceModel.Primitives 是基础包;如有必要,将其他人添加到您的项目中。
【讨论】:
"deprecated" -- 你有这方面的参考吗?根据 GitHub cmets,听起来服务器端 WCF 尚未正式弃用:github.com/dotnet/wcf/issues/1200 在“System.ServiceModel”中找不到类型“IDispatchMessageInspector”和“IServiceBehavior”。知道如何解决 _channelFactory.Endpoint.EndpointBehaviors.Add(new CustomInspectorBehavior()); 对于那些想知道为什么这个答案有这么多反对意见的人,它已经更新了完全不同的信息。 请注意 - System.ServiceModel 自 .NET Core 2.0 以来一直在进行移植更新,包括新的 .NET 5.0 框架(NETSTANDARD 框架,而不是 ASP.NET)【参考方案2】:如果您使用的是.NET Standard 2.0
(这是我测试的),您可以安装兼容的NuGet
软件包。
System.ServiceModel.Primitives
(当前为 v4.4.0)提供基本服务模型。
如果需要,也安装System.ServiceModel.Http
。
【讨论】:
谢谢!我通过安装程序 servicemodel.primitives 包解决了我的问题 在使用netcoreapp2.0
时添加这些引用。抛出以下错误:System.PlatformNotSupportedException: Configuration files are not supported.
.
我的一个库有“System.ServiceModel.Http”,直接集成就可以了。当我将它添加为 Nuget 包时,我还需要将“System.ServiceModel.Http”添加到我的实际项目中-_-。【参考方案3】:
Microsoft WCF Web Service Reference Provider 包装 SvcUtil.exe 并将从您的端点生成一个 .NET Standard 项目。查看项目文件,您将看到适合您的 ServiceModel 引用。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.ServiceModel.Duplex" Version="4.3.0" />
<PackageReference Include="System.ServiceModel.Http" Version="4.3.0" />
<PackageReference Include="System.ServiceModel.NetTcp" Version="4.3.0" />
<PackageReference Include="System.ServiceModel.Security" Version="4.3.0" />
<PackageReference Include="System.Xml.XmlSerializer" Version="4.3.0" />
</ItemGroup>
</Project>
当我需要这样做时,我可以在我的 .NET Core 项目中使用生成的类库。
【讨论】:
好主意!我会试试的。 感谢CWagner,链接已更新。 或者,dotnet svcutil
,如果你想要命令行控制:docs.microsoft.com/da-dk/dotnet/core/additional-tools/…【参考方案4】:
我有同样的问题,我必须将 .asmx Web 服务添加到我的类库 asp.net 核心项目中,我尝试通过添加连接服务选项直接添加引用,但我无法看到任何配置文件和大量引用错误也是,以下是我解决问题的步骤。
1-创建库项目名称Service Mapping 2-创建文件夹 Web References,然后在文件夹内创建 ClientHotel 3-从视图 ---> 终端 --- 命令提示符在 Visual Studio 中打开终端。 4-通过命令集成asmx服务 svcutil http://abctest.asmx (.asmx URL) 在 ClientHotel 文件夹内。
5-它将创建 .cs 类和 output.config 文件,其中包含引用。 6-现在我有参考错误,比如 命名空间 System.ServiceModel 等中不存在类型或命名空间 servicecontract 属性。
7-安装包 System.ServiceModel.Primitives 那么所有的引用错误都会消失。
这就是我能够将 .asmx 服务添加到我的类库项目的方式。
【讨论】:
以上是关于在 .NET Core 项目中找不到 System.ServiceModel的主要内容,如果未能解决你的问题,请参考以下文章
在mac中找不到匹配命令“dotnet-aspnet-codegenerator”asp.net core 2.1项目的可执行文件
在 .Net Core 3.1 的 2.0 版中找不到 MahApps ToggleSwitch
.Net Core 3.1 的 2.0 版中找不到 MahApps ToggleSwitch 属性
IE:“在 Access-Control-Allow-Origin 标头中找不到来源”使用启用 CORS 的 .NET Core 和 Angular 2
DB First,ASP Net Core 2.1,EF6:InvalidOperationException:在应用程序配置文件中找不到名为“DataContext”的连接字符串