web-dev-qa-db-ja.com

System.ServiceModelが.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プロジェクトで動作します。

26
BanksySan

マイクロソフトは現在、関連するアセンブリをNuGetのパッケージとして提供しています。

System.ServiceModel.Primitivesは基本パッケージです。必要に応じて他のプロジェクトをプロジェクトに追加します。

enter image description here

6
silkfire

.NET Standard 2.0(私がテストしたもの)を使用している場合、互換性のあるNuGetパッケージをインストールできます。

基本サービスモデルはSystem.ServiceModel.Primitives(現在v4.4.0)で利用できます。

必要に応じて、System.ServiceModel.Httpもインストールします。

55
Arghya C

Microsoft WCF Webサービス参照プロバイダー は、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プロジェクトで使用することができました。

12
Boggin