ResolveAssemblyReference не может найти dll, и я не могу заставить его посмотреть, где он находится

У меня есть решение с n проектами csharp и cpp project сверху, этот cpp предоставляет интерфейсы и заголовки, так что эти csharp могут использоваться в других решениях cpp.

Машина сборки настроена на сборку проекта csharp с архитектурой anyCPU, поэтому для каждой сборки в Solution\bin\Release предоставляется одна сборка. Для cpp anyCpu недоступен, поэтому я собираю проект дважды и сохраняю сборки в папках Solution\bin\Release\x86 и x64.

Это все, чтобы упаковать его в nuget как единый пакет с файлом.targets, чтобы облегчить его использование в других проектах cpp.

Проблема в том, что проект cpp ищет сборки csharp, используя ResolveAssemblyReference, и не может их найти, выдавая ошибочное сообщение:

    ResolveAssemblyReferences:
    Primary reference "Implementation".
        Could not find dependent files. Expected file "C:\Jenkins\Workspace\Solution\bin\Release\x86\Implementation.dll" does not exist.
        Could not find dependent files. Expected file "C:\Jenkins\Workspace\Solution\bin\Release\x86\Implementation.dll" does not exist.
        Resolved file path is "C:\Jenkins\Workspace\Solution\bin\Release\x86\Implementation.dll".
        Reference found at search path location "".

Я попытался изменить поведение ResolveAssemblyReferences, используя свойства командной строки, пользовательские цели / свойства, но безуспешно. Параметры, описанные в https://docs.microsoft.com/en-us/visualstudio/msbuild/resolveassemblyreference-task?view=vs-2017, по-видимому, вычисляются в процессе сборки, и я не могу ввести какое-либо значение, которое должно быть в в этом случае что-то вроде $(OutDir)..

Кажется, что единственное выполнимое решение - скопировать C# dll в каждую папку cpp, но я не думаю, что это способ решить это должным образом.

Закрытие я получил с помощью /p:ReferencePath, как показано ниже:

"C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MsBuild \ 15.0 \ bin \ MsBuild.exe" / p: BuildProjectReferences = false / p: Конфигурация = Выпуск /p:DebugType= полный /p:DebugSymbols=true /p:PlatformToolset=v120 /p:WindowsTargetPlatformVersion=8.1 /p:ForceImportBeforeCppTargets="C:\Jenkins\Workspace\Solution\Cpp.props" /p:OutDir="C:\Jenkins\Workspace\Solution\bin\ " Выпуск \x86\" /p: платформа =Win32 /t: интерфейс сборки \Interface.vcxproj /p:ReferencePath="C:\jenkins\workspace\Solution\bin\Release"

Мой пользовательский Cpp.props делает:

<Target Name="Output" BeforeTargets="ResolveAssemblyReferences">
  <Message Text="AssemblySearchPaths: $(AssemblySearchPaths)" />
</Target>

и добавив /p:ReferencePath, он был добавлен в AssemblySearchPaths в качестве второй записи после {CandidateAssemblyFiles}; но он все еще не находит эти библиотеки

0 ответов

Другие вопросы по тегам