Hi,
I'm migrating a console application to .NET Core 2.0 and when I run the app on my server I'm receiving this message:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Private.ServiceModel, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.
File name: 'System.Private.ServiceModel, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
This app is self-contained and has a netstandard2 library dependency that uses the System.ServiceModel.Http package to call an external api (using WCF).
When I publish the app using the win-x64 runtime identifier the file System.Private.ServiceModel.dll is not placed in the output folder.
If I use the win81-x64/win10-x64 runtime identifiers the file is placed in the output folder.
Is this the correct behavior?
Thanks!
Fabiano
Create the project: dotnet new console
Update the csproj to:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.ServiceModel.Http" Version="4.4.0" />
</ItemGroup>
</Project>
using System;
using System.ServiceModel;
namespace Sample
{
class Program
{
static void Main(string[] args)
{
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
{
MaxReceivedMessageSize = 5242880
};
Console.WriteLine("Hello World!");
}
}
}
Publish the project: dotnet publish --configuration Release --runtime win-x64
Execute the exe file on the publish folder
.NET Command Line Tools (2.0.2)
Product Information:
Version: 2.0.2
Commit SHA-1 hash: a04b4bf512
Runtime Environment:
OS Name: Windows
OS Version: 10.0.15063
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.0.2\
Microsoft .NET Core Shared Framework Host
Version : 2.0.0
Build : e8b8861ac7faf042c87a5c2f9f2d04c98b69f28d
The Runtime Identifier (RID) that System.Private.ServiceModel supports on Windows is win7. You can find this by opening up the NuGet package and look at the runtimes folder. The list of supported RIDs for .NET Core is in the runtime.json file. You can see win81-x64 and win10-x64 import win7 (indirectly) so they are S.P.SM compatible RIDs while win-x64 imports win so it's not compatible. The behavior you observed is expected.
@zhenlan Thanks for the help.
Are you going to support the portable RIDs (win-x64, win-x86)? Or is it best always use the specific for the platform I'm targeting?
@fabiano Yes, I think we can support portable RIDs in our next release (likely 2.1). Thanks for bringing this to our attention.
Just a note, we will need to change the RID of S.Private.ServiceModel from win7 to win for Windows. Our linux RID looks good (it's unix).
Try to add RuntimeIdentifier into csproj. We fixed our AMI Linux build by adding <RuntimeIdentifier>centos-x64</RuntimeIdentifier>
4.5.0 packages all have "win" RIDs now as well as "win7" RIDs for netstandard2.0 and netstandard1.3 respectively.
Thank you guys!
The latest Microsoft.Windows.Compatibility package (2.0.1) is still pulling in the old 4.1.x System.Private.ServiceModel so this problem is still happening to new apps that reference the Windows Compat Pack, to get around it you have to explicitly add a reference to the latest version of this System.Private.ServiceModel.
Which team is responsible for the Compability Pack, how can we get this fixed?
@zhenlan I'm confused by this. I'm developing an Azure Function (v2) app in dot net core 2.1 which uses System.ServiceModel.Http 4.5.3 (using System.Private.ServiceModel 4.5.3 in turn). My local RID is win10-x64 and I am not specifying any other RuntimeIdentifier in my csproj file, and I get a similar error to the above:
Could not load file or assembly 'System.Private.ServiceModel, Version=4.5.0.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. System.Private.CoreLib: Could not load the specified file.
Looking in the bin\Debug folder, the referenced assemblies are in netcoreapp2.1\bin, but I can't see System.Private.ServiceModel.dll in there.
If I add <RuntimeIdentifier>win-x64</RuntimeIdentifier> into my csproj then referenced assemblies are now in netcoreapp2.1\win-x64\bin and I can see System.Private.ServiceModel.dll in there, but when hitting F5 it fails to even start.
Even downgrading System.ServiceModel.Http to 4.4.4 still fails:
Could not load file or assembly 'System.Private.ServiceModel, Version=4.1.2.4, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. System.Private.CoreLib: Could not load the specified file.
It seems I can't get this to work regardless of the RID used, what am I doing wrong?
I am also facing the same issue, Is there any workaround for this?
Workaround add this to your build process
<Target Name="BuildProces" BeforeTargets="Build">
<Copy SourceFiles="$(USERPROFILE)\.nuget\packages\system.private.servicemodel\4.5.3\runtimes\win\lib\netstandard2.0\System.Private.ServiceModel.dll" DestinationFolder="$(OutputPath)\bin" />
</Target>
Thanks @breddynet.
@zhenlan @StephenBonikowsky some clarification here would be appreciated, why would the latest version not be included in a build on win10-x64 under dotnet 2.1.503?
@nero120 I'll look into this today.
Hi @nero120 while this is an RID issue it isn't with our WCF packages. We do the correct thing based on the .NET Core supported RID's runtime.json file.
The issue is with the Azure Function app, there is an active issue with lots of details regarding this problem.
Aha! Thank you very much for looking into this @StephenBonikowsky, I've subscribed to the issue you linked to.
@fabiano Yes, I think we can support portable RIDs in our next release (likely 2.1). Thanks for bringing this to our attention.
Just a note, we will need to change the RID of S.Private.ServiceModel from
win7towinfor Windows. Our linux RID looks good (it'sunix).
@zhenlan Is this resolved now, i have a .net core 2.2 console application consuming wcf service while it's working fine on development machine but when generated build in CI/CD using win-x64 platform it failed calling service with the same error :
System.IO.FileNotFoundException: Could not load file or assembly 'System.Private.ServiceModel, Version=4.1.2.4, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. File name: 'System.Private.ServiceModel, Version=4.1.2.4, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
@ehsansajjad465 the System.Private.ServiceModel assembly version 4.1.2.4 was shipped in WCF packages version 4.4.4 which was a .NET Core 2.0 servicing release.
This issue was fixed with the WCF packages version 4.5.0 which was part of the .NET Core 2.1 release.
So you need to update your WCF packages to the 4.5.0 version or newer.
I would recommend at least the latest version released from our 2.1 branch if not our just released 3.0 packages.
please use RID. I know win7-64 works. Portable RID will not work
dotnet publish -c Release -r win7-x64 --self-contained true
The Runtime Identifier (RID) that
System.Private.ServiceModelsupports on Windows iswin7. You can find this by opening up the NuGet package and look at the runtimes folder. The list of supported RIDs for .NET Core is in the runtime.json file. You can seewin81-x64andwin10-x64importwin7(indirectly) so they are S.P.SM compatible RIDs whilewin-x64importswinso it's not compatible. The behavior you observed is expected.
How to do this ? Confused on your reply.
For anyone struggling with this: In the process of upgrading .NET Framework Webjobs to .NET Core 3.1 I faced this issue. I was on 4.4.0 versions of System.ServiceModel packages. Upgrading til 4.7.0 fixed this problem.
For anyone struggling with this: In the process of upgrading .NET Framework Webjobs to .NET Core 3.1 I faced this issue. I was on 4.4.0 versions of System.ServiceModel packages. Upgrading til 4.7.0 fixed this problem.
@emilbm
I still get this after upgrading to 4.7.0. Im running .NetCore 3.1 already. Error: System.Private.ServiceModel: Configuration files are not supported.
This still seems to be happening in .NET 5...
Could not load file or assembly 'System.Private.ServiceModel, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.
Most helpful comment
4.5.0 packages all have "win" RIDs now as well as "win7" RIDs for netstandard2.0 and netstandard1.3 respectively.