Я пытаюсь использовать UnmanagedCallersOnly для экспорта некоторых методов для использования собственными DLL. Я следовал этим инструкциям о том, как это сделать. Это использование .Net 7.
Когда я пытаюсь посмотреть, есть ли какие-либо экспортированные функции, используя dumpbin.exe /EXPORTS <file path>, он показывает, что ничего не экспортируется. Пример кода приведен ниже:
using System.Runtime.InteropServices;
namespace lib1
{
public unsafe class test
{
[UnmanagedCallersOnly(EntryPoint = "test1")]
public static int test1()
{
Console.WriteLine("Test1 works!");
return 0;
}
[UnmanagedCallersOnly(EntryPoint = "test2")]
public static int test2()
{
Console.WriteLine("Test2 works!");
return 0;
}
}
}
Как правильно экспортировать функцию из библиотеки C#?
Обновлено: добавление файла .csproj.
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.Diagnostics.Runtime" Version = "3.1.512801" />
<PackageReference Include = "Microsoft.Diagnostics.Runtime.Utilities" Version = "3.0.442202" />
</ItemGroup>
</Project>
Это похоже на COM+, где нам нужно создать библиотеку типов или отметить параметр «Зарегистрироваться для сборки взаимодействия с Com»?
Не имею представления.
Согласно этому (Learn.microsoft.com/en-gb/dotnet/core/deploying/native-aot/…) вы не можете использовать AnyCPU — попробуйте добавить <IsAotCompatible> тоже.





Чтобы поместить мои методы в таблицу экспорта, мне нужно было добавить свойство <PublishAot>true</PublishAot> к файлу .csproj в разделе <PropertyGroup> и скомпилировать его с помощью следующей команды:
dotnet publish -r win-x64 -c Release
Из папки с файлом .sln. Затем, когда я выполнил следующую команду, я увидел экспортированные функции.
dumpbin.exe /exports <dll path>
Добавил в вопрос.