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在其csproj中将PreserveCompilationContext标志设置为true。
我在我们的控制台应用程序上有一个预构建事件,用于将RazorScope发布到解决方案根目录/ RazorScope文件夹,然后是一个后期构建和发布后事件,将RazorScope发布复制到控制台应用程序构建/发布中。由于PreserveCompilationContext创建的“refs”文件夹,我选择了这条路线,我想保持干净。如果我只是将RazorScope添加为控制台应用程序的项目引用,它不会为RazorScope引入那些引用或json.deps文件...
问题是,当RazorLight最终调用CompilationLibrary.ResolveReferencePaths时,它会失败b / c它拒绝查看bin / publish目录中的RazorScope文件夹,并希望所有内容都直接在基本目录中。如果我将refs和其他文件移动到base,它工作正常,但现在我弄脏了我的控制台任务bin / publish目录。
无论如何要告诉CompilationLibrary.ResolveReferencePaths在哪里寻找引用?
答案就是不使用RazorLightEngine Nuget包。无论如何,它并没有真正定期维护。
在使用.net核心razor库生成c#代码后,我最终只是滚动自己的Roslyn编译实例。