Упакуйте сторонний dll в контексте многоцелевого фреймворкового проекта. Net Framework &. Net Core - PullRequest
0 голосов
/ 01 мая 2020

Я использую следующую конфигурацию в csproj:

  <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
    <Reference Include="amqmdnet">
      <HintPath>..\bin\amqmdnet.dll</HintPath>
    </Reference>
    <Content Include="..\bin\amqmdnet.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <Pack>true</Pack>
      <PackagePath>lib\$(TargetFramework)</PackagePath>
    </Content>
  </ItemGroup>

  <ItemGroup Condition="$(TargetFramework.StartsWith('netstandard2')) or $(TargetFramework.StartsWith('netcoreapp3'))">
    <Reference Include="amqmdnetstd">
      <HintPath>..\bin\amqmdnetstd.dll</HintPath>
    </Reference>
    <Content Include="..\bin\amqmdnetstd.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <Pack>true</Pack>
      <PackagePath>lib\$(TargetFramework)</PackagePath>
    </Content>
  </ItemGroup>

каждая его часть работает нормально, когда проект установлен с конкретной структурой, например:

    <TargetFramework>netcoreapp3.1</TargetFramework>

, но когда проект имеет несколько рамок, отмечается, что dll не включены *

Visula Studio version, about dialog


Как я поступил

По какой-то причине nuget spec не заполняет метаданные; Я тестирую его с nuget версией 5.5.1.6542.

  1. Я строю проект с VS, как это.
  2. Изменить расширение {папка проекта} \ bin \ Release \ xxx.nupkg в .zip
  3. Извлечь файл xxx.nuspe c из xxx.zip. Он также будет содержать метаданные зависимостей.
  4. Редактировать xxx.nuspe c с NuGet Package Explorer
  5. Сборка nuget xxx.nuspec
  6. . nuspe c документация

1 Ответ

1 голос
/ 04 мая 2020

Пакет стороннего dll в контексте многоцелевого фреймворкового проекта. Net Framework &. Net Core

Я попробовал ваш пример и столкнулся с той же проблемой на моей стороне , Когда я использую TargetFrameworks, чтобы установить такие DLL в многоцелевых проектах и ​​столкнуться с той же ситуацией.

А <pack>true</pack> не работает из-за вашего состояния. Но когда я смотрел в выходную папку в таком проекте, <CopyToOutputDirectory>Always</CopyToOutputDirectory> работает. И в соответствии с условиями, скопируйте два типа DLL в соответствующую целевую папку платформы.

Однако , pack не работает, но все же странно.

Так что я сообщаю об этой проблеме на нашем форуме D C. Смотрите эту ссылку . Вы можете проголосовать за эту проблему и добавить любые комментарии, если я не описал проблему подробно. И любой, кто интересуется этим вопросом, проголосует за вас, чтобы сотрудники привлекли к нему больше внимания.

Предложение

В качестве предложения , вы можете использовать файл nuspe c с nuget.exe cli для упаковки ваш проект, который я успешно протестировал.

1) загрузите nuget.exe по этой ссылке и настройте его путь в системной переменной среды PATH .

2) вызвать командную строку разработчика для VS или CMD, а затем cd путь к вашему проекту (который существует xxx.csproj)

Затем вызвать nuget spec и получить xxx.nuspec файл

3) открыть xxx.nuspec файл и изменить его следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    ......
  </metadata>

<files>
<file src="bin\Debug\net451\amqmdnet.dll" target="lib\net451" />
<file src="bin\Debug\net451\PRCB.IBM.MQ.dll" target="lib\net451"/>
<file src="bin\Debug\netcoreapp3.1\amqmdnetstd.dll" target="lib\netcoreapp3.1" />
<file src="bin\Debug\netcoreapp3.1\PRCB.IBM.MQ.dll" target="lib\netcoreapp3.1" />
</files>

</package>

4) Наконец, введите nuget pack xxx.nuspec и вы получите файл xxx.nupkg.

...