Как исключить все подпакеты nuget из вывода в проекте vsproject

#visual-studio #f#

Вопрос:

Я создаю плагин, который должен зависеть от системных библиотек его загрузчика в F#.

 In my vsproject I have the following:

    <ItemGroup>
        <PackageReference Include="FSFramework" Version="1.0.0-preview-1">
            <ExcludeAssets>runtime</ExcludeAssets>
        </PackageReference>
      
        <PackageReference Include="Veldrid" Version="4.8.0" />
        <PackageReference Include="Veldrid.StartupUtilities" Version="4.8.0" />
    </ItemGroup>
 

Это правильно предотвращает работу с фреймами.dll не будет записана, однако nuget FSFramework также подключается FSharp.Core.dll который все равно записывается в вывод. Если я попытаюсь поместить ссылку на пакет непосредственно в FSsharp.Core.dll В итоге я получаю это дважды и ошибку сценария сборки.

Комментарии:

1. Является ли эта проблема специфичной для работы с фреймами? Я попробовал это с другими пакетами Nuget на .NET 5.0, и у меня не возникло никаких проблем. (FSFramework-это только .NET 6.0, которого у меня еще нет.)

Ответ №1:

Я играл с плагинами на .NET 6.0, но я не уверен, что смогу точно воспроизвести то, что вы видите. У вас есть репозиторий GitHub, который демонстрирует проблему?

Один небольшой совет, который кажется важным, состоит в том, чтобы включить в свой PropertyGroup :

 <EnableDynamicLoading>true</EnableDynamicLoading>
 

Смотрите эту статью для получения дополнительной информации.

Вот полное .fsproj описание плагина, который работает для меня:

 <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <WarnOn>3390;$(WarnOn)</WarnOn>
    <EnableDynamicLoading>true</EnableDynamicLoading>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="HelloCommand.fs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="FSFramework" Version="1.0.0-preview-1">
      <ExcludeAssets>runtime</ExcludeAssets>
    </PackageReference>
  </ItemGroup>

  <ItemGroup>
      <ProjectReference Include="..PluginBasePluginBase.csproj">
          <Private>false</Private>
          <ExcludeAssets>runtime</ExcludeAssets>
      </ProjectReference>
  </ItemGroup>

</Project>
 

Комментарии:

1. Спасибо. Я перешел к чему-то другому, но когда я вернусь к этому проекту, я попробую это!