Я пытаюсь перенести существующую библиотеку в .NET Core, чтобы иметь возможность запустить ее под Linux.
При использовании библиотеки в Linux среда выполнения выдает System.ArgumentException:
Произошло необработанное исключение типа «System.ArgumentException» в ConsoleApp6.dll: «Тип« ConsoleApp6.MyStruct »нельзя маршалировать как неуправляемую структуру;невозможно вычислить значимый размер или смещение. '
Трассировка стека: в System.Runtime.InteropServices.Marshal.OffsetOfHelper (IRuntimeFieldInfo f) в ConsoleApp6.Program.Main (String [] args) в C: \ Users\ user \ source \ repos \ ConsoleApp6 \ ConsoleApp6 \ Program.cs: строка 10
В Windows все работает как положено.Вот простое консольное приложение, которое демонстрирует проблему:
using System;
using System.Runtime.InteropServices;
namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine((Int32) Marshal.OffsetOf<MyStruct>("buffer"));
Console.ReadLine();
}
}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)]
public struct MyStruct
{
public Int16 number;
public byte[] buffer;
}
}
Вот файл csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.7.12" />
</ItemGroup>
</Project>
Я ожидаю, что на выходе будет 4
в Windows и Linux, но вЛинукс выдает вышеприведенное исключение.