.Net Standard 2.0 CompilationLibrary.ResolveReferencePaths завершается ошибкой - PullRequest
0 голосов
/ 06 марта 2019

TL; DR; Есть ли способ сообщить CompilationLibrary.ResolveReferencePaths, где искать ссылки?

Я пытался изменить текущий рабочий каталог и даже пытался изменить текущий базовый каталог AppDomain, но безрезультатно.


Поэтому моя команда в настоящее время использует RazorLight для обработки шаблонов сообщений в консольном приложении .Net Core 2.2.

Я добавил RazorLight 2.0.0-beta1 в библиотеку .Net Standard 2.0 и создал для нее интерфейс. Однако мы обнаружили, что возник конфликт с другой библиотекой, которую мы использовали из-за этой библиотеки, использующей C DLL. Чтобы разрешить конфликт, мы решили удалить другую библиотеку, используя C DLL, поскольку никто еще не использовал ее функциональность. Тем не менее, теперь мы находимся в точке, где нам нужны оба.

К счастью, RazorLight позволяет вам указать сборку для использования в качестве корня. Поэтому я создал базовый проект пустой библиотеки (RazorScope), в котором нет других библиотек, кроме RazorLight и нашей библиотеки моделей.

RazorScope имеет флаг PreserveCompilationContext для true в своем csproj.

У меня есть событие перед сборкой в ​​нашем консольном приложении для публикации RazorScope в корневой папке решения / RazorScope, а затем событие после сборки и после публикации, которое копирует публикацию RazorScope в сборку / публикацию приложения консоли. Я выбрал этот путь из-за папки «refs», которую создает PreserveCompilationContext, и я хотел, чтобы все было чисто. Если я просто добавлю RazorScope в качестве ссылки на проект консольного приложения, он не будет извлекать эти ссылки или файл json.deps для RazorScope ...

Проблема заключается в том, что когда RazorLight в конце концов вызывает CompilationLibrary.ResolveReferencePaths, он терпит неудачу b / c, он отказывается искать в папке RazorScope в каталоге bin / publish и ожидает, что все будет непосредственно в базовом каталоге. Если я перенесу refs и другие файлы в базу, она будет работать нормально, но теперь я испачкал мой каталог консольных задач bin / publish.

Есть ли способ сообщить CompilationLibrary.ResolveReferencePaths, где искать ссылки?

1 Ответ

0 голосов
/ 14 марта 2019

Ответ на это просто не использовать пакет RazorLightEngine Nuget. Во всяком случае, он не поддерживается регулярно.

В итоге я просто развернул свой собственный экземпляр компиляции Roslyn после использования библиотеки бритвы .net core для генерации кода c #.

...