Как упаковать специфическую для C ++ / CLI DLL x86 / x64 вместе с Nuget? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть C ++ / CLI DLL, которая взаимодействует со сторонней DLL.Я хочу упаковать это как Nuget.

Я следовал это официальное руководство по MS , в этом блоге и , прочитайте этот другой вопрос .

Итак, вот что я сделал:

Сначала я создал правильный файл nuspec:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>CPlusPlusNativeIFace</id>
    <version>1.0.4</version>
    <title>CPlusPlusNativeIFace</title>
    <authors>Jens Rabe</authors>
    <owners>Who owns that</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>A DLL that makes a native third-party DLL available to .net</description>
    <releaseNotes>foo</releaseNotes>
    <copyright>errm...</copyright>
    <tags>foo bar</tags>
  </metadata>
  <files>
    <file src="..\Release\**" target="runtimes/win-x86/lib/net461" />
    <file src="..\x64\Release\**" target="runtimes/win-x64/lib/net461" />
    <file src="DummyAny\**" target="ref\net461" />
  </files>
</package>

Затем я скомпилировал DLL для выпуска x86 и выпуска X64.Затем я создал папку DummyAny, скопировал содержимое папки x86 и использовал утилиту corflags, как в ссылках 2 и 3, чтобы убрать 32-битный флаг.

Когда я сейчас nuget packи nuget add, и, пытаясь сослаться на этот пакет в другом проекте, я всегда получаю:

Could not install package 'CPlusPlusNativeIFace 1.0.4'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6.1', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.

Я дважды проверил правильность файлов:

  • У меня есть x86вещи в runtimes/win-x86/lib/net461
  • У меня есть x64 вещи в runtimes/win-x64/lib/net461
  • У меня есть папка ref/net461 с манипулированной DLL в

Но я все ещене могу загрузить пакет.

Я также пытался поместить DLL-файлы, специфичные для процессора, в runtimes/win-x86/native и runtimes/win-x64/native, но безрезультатно.

Что еще мне не хватает?Разве это не работает для проектов C ++ / CLI, созданных на основе .net Framework?

1 Ответ

0 голосов
/ 16 апреля 2019

Оказалось, что официальная документация по MS здесь не пригодна для использования.

Этот вопрос был / указан здесь как "связанный", и принятый ответ заставил его работать на меня.Я использовал пример проекта на Github в качестве ссылки.

Так вот как я заставил его работать:

  1. Открыл свойства проекта, перешел к Свойства конфигурации / Общие , выбрано Все конфигурации и Все платформы и как Выходной каталог , я указал: $(ProjectDir)bin\$(Platform)\$(Configuration)\
  2. Перестроен проект для x86 и x64 в режиме Release
  3. Адаптирован Nuspec, чтобы он был таким:
    <?xml version="1.0"?>
    <package >
    <metadata>
    <id>CPlusPlusNativeIFace</id>
    <version>1.0.5</version>
    <title>Third Party Proxy</title>
    <authors>Jens Rabe</authors>
    <owners>foo</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>bar</description>
    <releaseNotes>Further experimenting with nuget</releaseNotes>
    <copyright>baz moo</copyright>
    <tags>quux bletch</tags>
    </metadata>
    <files>
    <file src="bin\Win32\Release\**" target="build\x86" />
    <file src="bin\x64\Release\**" target="build\x64" />
    <file src="bin\Win32\Release\**" target="lib\net461" />
    <file src="CPlusPlusNativeIFace.props" target="build\net461" />
    </files>
    </package>
    
  4. Добавлен CPlusPlusNativeIFace.props, который содержит следующее:
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
    <Reference Include="CPlusPlusNativeIFace" Condition="'$(Platform)' == 'x86'">
      <HintPath>$(MSBuildThisFileDirectory)..\x86\CPlusPlusNativeIFace.dll</HintPath>
    </Reference>
    <Reference Include="CPlusPlusNativeIFace" Condition="'$(Platform)' == 'x64'">
      <HintPath>$(MSBuildThisFileDirectory)..\x64\CPlusPlusNativeIFace.dll</HintPath>
    </Reference>
    </ItemGroup>
    </Project>
    

Теперь я могу сделать nuget pack CPlusPlusNativeIFace.nuspec, и я получаю пакет Nuget, который устанавливается правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...