我不得不将 liboqs 构建复制到 amaranth.Tests
目录的 bin/Debug/net6.0/
中。
【讨论】:
C# 在集成测试中获取 System.DIINotFoundException 但在我实际运行应用程序时却没有?答案
C# Getting System.DIINotFoundException in An Integration Test But Not When I'm Actually Running The App?C# 在集成测试中获取 System.DIINotFoundException 但在我实际运行应用程序时却没有?这里最奇怪的是我的应用程序运行良好。只是我的集成测试找不到.dll或dylib文件。我正在使用 liboqs,我的项目结构如下所示:
amaranth/
Models, Controllers, Views, etc...
oqs.dll
liboqs.dylib
liboqs.so
amaranth.Tests/
IntegrationTests/
AdminControllerTests.cs
引用 dll/dylib 文件的文件位于 `amaranth/Helpers/liboqsRelatedHelpers/Sig.cs,该文件中引用 dll/dylib 文件的部分如下所示:
#region OQS native DLL functions
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static IntPtr OQS_SIG_new(string method_name);
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static int OQS_SIG_keypair(IntPtr sig, byte[] public_key, byte[] secret_key);
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static int OQS_SIG_sign(IntPtr sig, byte[] signature, ref UIntPtr sig_len, byte[] message, int message_len, byte[] secret_key);
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static int OQS_SIG_verify(IntPtr sig, byte[] message, int message_len, byte[] signature, int signature_len, byte[] public_key);
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static void OQS_SIG_free(IntPtr sig);
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static IntPtr OQS_SIG_alg_identifier(int index);
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static int OQS_SIG_alg_count();
[DllImport("oqs", CallingConvention = CallingConvention.Cdecl)]
extern private static int OQS_SIG_alg_is_enabled(string method_name);
#endregion
这是我在 Visual Studio for Mac 中发现错误时的样子:
什么可能导致这些文件不在集成测试中被引用,但允许在运行实际应用程序时引用这些文件?
【问题讨论】:
标签: c# asp.net-mvc dll dllimport calling-convention
我不得不将 liboqs 构建复制到 amaranth.Tests
目录的 bin/Debug/net6.0/
中。
【讨论】: