在.NET Core项目中找不到System.ServiceModel

时间:2017-08-07 10:43:37

标签: c# .net wcf .net-core

我有一个.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项目。

4 个答案:

答案 0 :(得分:47)

如果您使用的是.NET Standard 2.0(我测试的内容),您可以安装兼容的NuGet软件包。

基本服务模型位于 System.ServiceModel.Primitives (目前为v4.4.0)。

如果需要,也可以安装System.ServiceModel.Http

答案 1 :(得分:12)

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项目中使用生成的类库。

答案 2 :(得分:0)

我遇到了同样的问题,我不得不将 .asmx Web 服务添加到我的类库 asp.net 核心项目中,我尝试通过添加连接服务选项直接添加引用,但我看不到任何配置文件和大量引用还有错误,以下是我解决问题的步骤。

1-创建库项目名称服务映射 2-创建文件夹 Web References,然后在文件夹 ClientHotel 中创建 3-从视图 ---> 终端 --- 命令提示符在 Visual Studio 中打开终端。 4-通过命令集成asmx服务 svcutil http://abctest.asmx (.asmx URL) 在 ClientHotel 文件夹内。

5-它将创建包含引用的 .cs 类和 output.config 文件。 6-现在我有参考文献的错误,比如 命名空间 System.ServiceModel 等中不存在类型或命名空间 servicecontractattribute。

7-安装包 System.ServiceModel.Primitives 然后所有引用错误都将消失。

这就是我能够将 .asmx 服务添加到我的类库项目的方式。

答案 3 :(得分:-4)

Microsoft已经在NuGet上将相关程序集作为程序包提供。

System.ServiceModel.Primitives 是基础包;如有必要,将其他人添加到您的项目中。

enter image description here