System.NotSupportedException в TaskScheduler при использовании PublishTrimmed .NET6.0

Я хочу использовать TaskScheduler, используя «Библиотеку типов TaskScheduler 1.1» из «Добавить ссылку COM».

      using TaskScheduler;
...
     ITaskService taskservice = null;
     taskservice = new TaskScheduler.TaskScheduler(); <=NotSupportedException
     taskservice.Connect(null, null, null, null);

Но приведенный выше код вызовет исключение.

System.NotSupportedException: 'Встроенный COM был отключен с помощью переключателя функций. См. Https://aka.ms/dotnet-illink/com для получения дополнительной информации.

Если для параметра PublishTrimmed установлено значение false, исключение не возникает. Однако я не хочу устанавливать для него значение false, потому что это увеличит размер exe.

файл проекта следующий

       <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <PublishSingleFile>true</PublishSingleFile>
    <SelfContained>false</SelfContained>
    <PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>

Пытаюсь добавить сборку в TrimmerRootAssembly. Но следующее не работает.

      <ItemGroup>
    <TrimmerRootAssembly Include="TaskScheduler" />
    <TrimmerRootAssembly Include="Microsoft.Win32.TaskScheduler" />
</ItemGroup>

1 ответ

Похоже, обрезка с помощью COM-ссылок отключена по умолчанию из-за возможных проблем.
Вы можете повторно включить его, добавив <BuiltInComInteropSupport>true</BuiltInComInteropSupport>на ваш PropertyGroupв вашем файле csproj.

Вы также можете использовать ComWrappers, чтобы получить правильное решение для взаимодействия AOT в .NET 5 — https://docs.microsoft.com/en-us/dotnet/standard/native-interop/tutorial-comwrappers .

Другие вопросы по тегам