C ++ Interop DLL и ссылки, а также директива / FU Forced Includes - PullRequest
0 голосов
/ 18 октября 2019

Я изменяю проект Interop, и меня смущает, как к одному отдельному файлу .cpp применена опция компилятора / FU, которая соответствует любым ссылкам, добавленным в разделе «Ссылки», хотя на самом деле его нет в списке «Принудительный файл #using». ".

Только этот файл с именем "MyProject.Interop.cpp" имеет этот параметр / FU в списке.

Я придерживался предположения, что, возможно, это произошло потому, что файл cpp соответствует имени файла проектаТем не менее, я могу переименовать MyProject.Interop.cpp в Bob.cpp, и он все равно останется с параметром / FU, установленным на все библиотеки, которые я добавлю в ссылки.

Если вы действительно загляните внутрь файла .vcxprojнет ссылок на параметр / FU. Если я добавлю его вручную в расширенный раздел в C ++ \ Advanced, он появится в XML под тегом ForcedIncludeFiles.

То есть со следующей настройкой проекта

<Reference Include="MyCSharpLibrary">
    <Private>false</Private>
  <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
</Reference>

/FUпоявится в разделе Command Line инструмента C ++

Я также посмотрел, наследует ли он какой-либо специальный файл .props, и нет.

Это произошло потому, что яхотел разделить реализацию классов, где все внутри MyProject.Interop.cpp, чтобы организовать их по классам, но затем они не компилируются, потому что неявное #using не генерируется для этих файлов

Кто-нибудь знает, что это за настройки проекта, что делает этот файл особенным?

1 Ответ

0 голосов
/ 18 октября 2019

После долгих размышлений над проектом и изучения различных вариантов ответ заключается в том, что любой файл .cpp, для которого включен параметр / clr, автоматически получает параметр /FU для каждой ссылки, включенной в раздел ссылок проекта

...