2016-06-14 2 views
1

Я создаю пакет NuGet, написанный на C++/CLI. Он служит взаимодействием между C# и родным C++.NuGet interop pacakge руководящие принципы по отладке и выпуску сборки

Произведенная DLL имеет управляемую площадь поверхности и собственную площадь поверхности имбика.

Visual Studio только любит использовать единую ссылочную сборку из пакета NuGet, а не другую ссылочную сборку в конфигурации Debug или Release принимающего проекта.

Я хочу, чтобы эталонная сборка, потребляемая из пакета NuGet, отличалась в соответствии с конфигурацией, поэтому я могу вставлять как DLL Debug, так и Release в nupkg и иметь сборки Release C#, связанные с версией DLL и Debug C# builds bind to DLL Debug.

Это требование для меня, потому что кажется, что макет двоичных объектов std для классов std C++ (например, std :: string) различается между моими сборками Debug и Release.

Сборка компиляции DLL не работает с компиляцией Debug остальной части программы. Я получаю схожую ошибку с компиляторами Debug компиляции DLL и Release программы.

Есть ли что-нибудь, что я могу здесь сделать? Я немного изучил размещение ссылочных элементов в файле NuGet .props или .targets и использовании свойства $ (Конфигурация), но я пока не получил этого, чтобы работать.

+2

Вряд ли единственная проблема, вы получаете точно такие же проблемы с совпадением, когда пользователь библиотеки имеет другую версию VS. Это должно * никогда не быть проблемой в проекте C++/CLI, вы раскрываете только управляемый интерфейс. Как выглядит ваш код на C++, всегда должна быть детальность реализации, поэтому совсем не важно, чтобы вы развертывали версию сборки выпуска. –

ответ

1

Возможно, я только что получил эту работу, хотя, признаюсь, я не уверен, насколько это хорошо отразится на проекте реального мира.

Мой Interop NuGet пакет:

  1. встраивает как отлаживать и освободить библиотеки DLL в Lib \ родной \ Debug \ и Lib \ родной \ релиз \ соответственно.
  2. Имеет .props файл, который содержит <ItemGroup><Reference> к DLL, наряду с <HintPath> к $(MSBuildThisFileDirectory)..\lib\native\$(Configuration)\[DLL Name]

Это удалось успешно связываться с Debug или Release NuGet DLL, в зависимости от конфигурации сборки.

Смежные вопросы