Изменилось ли в VS2017 способ доступа к пространствам имен C # в C ++? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть пространство имен, написанное в решении C #, которое выводит DLL.Эта DLL является внешней зависимостью для проекта C ++ в другом решении.Ранее я использовал VS2013, но с тех пор начал мигрировать на VS2017 и получаю

C2871 'Foo': пространство имен с таким именем не существует.

Вот базовая интерпретация моего кода на C ++.«ExUtil» - это класс в пространстве имен FooExceptionUtil.

    #include "FooExUtil.hh"

    using namespace Foo::ExceptionUtil;

    extern "C" {
    void FooExUtilWriteMiniDump (int Option) 
       {
          ExUtil::WriteMiniDump ((ExUtil::Option) Option);
       }
    }

Пространство имен моего C # выглядит следующим образом:

    using System;
    using System.Diagnostics;
    using System.IO;
    using System.Runtime.InteropServices;

    namespace Foo.ExceptionUtil
       {
       static public class ExUtil
          {
          //Option enum and WriteMiniDump routine defined here
          }
       }

Мое решение C # выводит DLL, на которую внешне ссылается мое решение C ++,И, как я уже сказал, у меня не было проблем с этим при использовании VS2013.VS2017 изменил способ работы внешних ссылок?Я могу просмотреть пространство имен в браузере объектов решения C ++, и я могу видеть вплоть до отдельных подпрограмм enum Option и WriteMiniDump.Безусловно, пространство имен определено.

-Спасибо

1 Ответ

0 голосов
/ 27 сентября 2018

Хорошо, поэтому я разобрался с проблемой.DLL-библиотека C #, к которой я пытался получить доступ, была создана для платформы .NET 4.5. VS Platform Toolset v141 не совместим с .NET 4.5

Я обновил свое приложение C # до .NET 4.7.1, но мой проект C ++ по-прежнему сообщал о тех же ошибках.В итоге мне пришлось вручную редактировать файл .vcxproj, искать раздел и добавлять тег TargetFrameworkVersion, например:

      <PropertyGroup Label="Globals">
         <ProjectGuid>{B21965FA-2013-4309-92CB-9282FFAEC9E2}</ProjectGuid>
         <RootNamespace>c2tcore</RootNamespace>
         <Keyword>MFCProj</Keyword>
         <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
         <TargetFrameworkVersion>4.7.1</TargetFrameworkVersion>
      </PropertyGroup>

После этого я выгружал свой проект C ++, перезагружал его, очищал и перестраивал иэто было наконец успешно.Надеюсь, что это поможет кому-то еще в будущем.

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