#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 не так просто, и я сделал несколько попыток.
- Я создаю файл .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>
- Я изменил .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. Это просто напоминание.