Создайте пакет nuget со ссылкой на библиотеку DLL COM-взаимодействия

#c# #nuget #.net-core-3.1

#c# #nuget #.net-core-3.1

Вопрос:

Я пытаюсь создать пакет nuget из библиотеки .NETCore класса . В этом проекте есть ссылка на библиотеку DLL COM Interop (Interop.NETWORKLIST). Если я запускаю тестовый проект, содержащий ссылку на этот проект, он работает без проблем. Однако, когда я создаю его в nuget packagee и добавляю пакет в тестовый проект, при его запуске я получаю сообщение об ошибке из библиотеки dll, которая отсутствует.

После некоторых поисков я обнаружил, что создать COM-dll в пакете nuget не так просто, и я сделал несколько попыток.

  1. Я добавляю вручную COM dll в пакет nuget с помощью Nuget Package Explorer : введите описание изображения здесь
  1. Я создаю файл .targets и добавляю его в проект :
  • Ссылка в моем csproj :
 <ItemGroup>
  <Content Include="EINetwork.targets">
    <PackagePath>build</PackagePath>
    <Pack>true</Pack>
  </Content>
</ItemGroup>
  
  • Содержимое файла .targets :
 <Target Name="EiNetwork.NETWORKLIST" AfterTargets="ResolveReferences" BeforeTargets="FindReferenceAssembliesForReferences">
    <PropertyGroup>
      <_InteropAssemblyFileName>NETWORKLIST</_InteropAssemblyFileName>
    </PropertyGroup>
    <ItemGroup>
      <ReferencePath Condition=" '%(FileName)' == '$(_InteropAssemblyFileName)' AND '%(ReferencePath.NuGetPackageId)' == '$(MSBuildThisFileName)' ">
        <EmbedInteropTypes>false</EmbedInteropTypes>
      </ReferencePath>
    </ItemGroup>
  </Target>
  
  1. Я изменил .nuspec, чтобы добавить dll вручную
 <files>
  <file src="Interop.NETWORKLIST.dll" target="lib" />
  <file src="EINetwork.targets" target="build"/>
</files>
  

Однако с учетом этих различных изменений проблема остается прежней, и я не могу использовать пакет nuget в своем тестовом проекте.

Я что-то пропустил или сделал неправильно?

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

1. Попробуйте использовать <file src="xxxInterop.NETWORKLIST.dll(the path of the Interop.NETWORKLIST.dll)" target="libnetcoreapp3.1" /> в вашем .nuspec файле. Кроме того, перед установкой этой новой версии пакета nuget, пожалуйста, попробуйте сначала очистить кэш nuget , чтобы удалить старый неизмененный. Затем удалите bin и obj папку вашего основного проекта, затем установите новую версию пакета nuget.

2. Работает ли это?

3. Что вы подразумеваете под «путем к DLL»? путь в пакете nuget ? Поскольку ddl — это dll, «сгенерированная» Visual Studio, поэтому реального пути нет, кроме как в папке bin

4. Путь к файлу в папке вашего проекта. на самом деле в папке bin. Это просто напоминание.