Description
System.Security.Cryptography.Pkcs 10.0.2 (and other 10.x.x versions) has a dependency on Microsoft.Bcl.Cryptography in versions before net10.0 but has no dependencies in net10.0 as a result any code written in a library using Microsoft.Bcl.Cryptography via a transitive dependency and compiled as pre-net10 and then used via projectreference in a net10 project fails due to System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.Bcl.Cryptography'
Reproduction Steps
- Make ClassLibrary1 project targeting net8 and
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="10.0.2" />
- Add the Utilities.cs below to ClassLibrary1
namespace ClassLibrary1
{
using System;
using System.Security.Cryptography.X509Certificates;
public static class Utilities
{
public static X509Certificate2 Parse(string clientSecret)
{
return X509CertificateLoader.LoadCertificate(Convert.FromBase64String(clientSecret));
}
}
}
- Make ConsoleApp1 project targeting net10 and ProjectReference to ClassLibrary1
- Update program.cs in ConsoleApp1 below
namespace ConsoleApp1
{
using ClassLibrary1;
class Program
{
static void Main(string[] args)
{
// Self-Signed cert, not a secret
var cert = Utilities.Parse("MIICtTCCAZ2gAwIBAgIJAIBtw/Sm5KB2MA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNVBAMTD1Rlc3RDZXJ0aWZpY2F0ZTAeFw0yNjAzMjUwMzI0MjlaFw0yNzAzMjUwMzI0MjlaMBoxGDAWBgNVBAMTD1Rlc3RDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoHhZk4TDwumRR3zJmL398aCwwgKC2PJOxhR9WKf0DxAwnFLKMtAnX3SOBh5evzH98J7Bpd3yPmwxCafjM3tp6N3V7CBK0mWkIRSUIXLi0+K+DyH2cXnPqSt71TVik9xGIIyjrKMDUrD70BvHwqR0IRTvLHfUSSjbosbprRYLjj+1eFRRapMWSi1HRZqvIvp1qtqKdMawp01qUIuARYCbHsCKmrlMCSd+CrvaiioZJcpBJqkNtqwaOgmzyE3iG6fpR04g+m+xE/ZATHaTyqc25HDu0bes/NrU62s0oFbPreWv4nKBOHVUGlhBnHTrKPLbB3AAZvtFgSGVt4LOKI7xkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAfjmzmwf+nXaUjk9YLuxnDKOu5C9N/sQr/F5F1a11D1Ml9K/0q2gv0U4whbT+OB3oTj7RP8ONXTghd9OHiygxYWXe+rEF7xayoAlsC9BAEvl4ZjWxBnUKi8sEnMKhugmptc5ltXk4t1H8Kp+I6gwT85Y1yH99zJbrDvd5BEQRvsNabvnBvjYeIX+tAHiKLJ0fxzf8gM/vhEf1dn+RrXoVL6O2KxJho9S/avnN+lRGyOdWG9ZhVbjZGTTllQwJzycanb+VRFTh0ugidYcFj/MdW9hlOtnyHTFoGStvhfS8FK9x2ZwjBNQd1unRvdh0VHXD2KM5IWuPgyMH2bTuG04dOA==");
}
}
}
- Run app and see 'Microsoft.Bcl.Cryptography' FileNotFound
Expected behavior
Microsoft.Bcl.Cryptography.dll used in ClassLibrary1 exists in ConsoleApp1's output folder.
Actual behavior
Microsoft.Bcl.Cryptography.dll is not copied to ConsoleApp1's output folder as the transitive dependency from System.Security.Cryptography.Pkcs does not apply in net10.0
Regression?
If ConsoleApp1 is net8 or net9 there are no issues.
Known Workarounds
Add an explicit dependency in either ConsoleApp1 or ClassLibrary1 to Microsoft.Bcl.Cryptography 10.0.2
Configuration
Net SDK 10.0.105
Windows 11
x64
Other information
No response
Description
System.Security.Cryptography.Pkcs 10.0.2 (and other 10.x.x versions) has a dependency on Microsoft.Bcl.Cryptography in versions before net10.0 but has no dependencies in net10.0 as a result any code written in a library using Microsoft.Bcl.Cryptography via a transitive dependency and compiled as pre-net10 and then used via projectreference in a net10 project fails due to
System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.Bcl.Cryptography'Reproduction Steps
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="10.0.2" />Expected behavior
Microsoft.Bcl.Cryptography.dll used in ClassLibrary1 exists in ConsoleApp1's output folder.
Actual behavior
Microsoft.Bcl.Cryptography.dll is not copied to ConsoleApp1's output folder as the transitive dependency from System.Security.Cryptography.Pkcs does not apply in net10.0
Regression?
If ConsoleApp1 is net8 or net9 there are no issues.
Known Workarounds
Add an explicit dependency in either ConsoleApp1 or ClassLibrary1 to Microsoft.Bcl.Cryptography 10.0.2
Configuration
Net SDK 10.0.105
Windows 11
x64
Other information
No response