我正在生成一个动态包含WPF项目的包装类的.NET Dll。我正在用System.CodeDom.Compiler.CodeDomProvider类来完成它。Roslyn - CodeDom:HowTo动态编译代码到Universal-Windows-Library
现在我必须为Universal-Windows-Dll创建一个包装类。 由于System.CodeDom.Compiler.CodeDomProvider
类仍然使用旧的.NET编译器,我不得不切换到新的Roslyn编译器(通过添加Nuget包Microsoft.CodeDom.Providers.DotNetCompilerPlatform
)。 然后我用新的CSharpCodeProvider
替换了code-dom-Provider的实例化。
new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider();
该代码编译良好,但我发现没有办法设置TargetFramework/CompilerVersion。 旧的CodeDomProvider
有CompilerOptions
我可以指定CompilerVersion
等。但新的罗斯林没有这个选项(或者我愚蠢地找到它)。
结果是它将DLL编译为一个正常的.NET 4.x Dll。但是我需要一个Universal-Windows Dll,因为它在Universal-Project中使用。
浏览互联网我发现许多不同的方法来使用Roslyn编译器。他们中的大多数似乎来自编译器的旧Beta版本,因此它们都不起作用。 Roslyn.Compilers
命名空间(在大多数示例中使用)似乎是来自测试版的命名空间。
有人知道如何正确使用roslyn编译器吗? 我不想修改编译器。我只是想通过从SourceCode编译来动态生成DLL,但我必须指定平台目标。
我建议您使用RuntimeEnvironment.GetRuntimeDirectory()来避免硬编码运行时路径。 –
我对此的评论是,它似乎不值得为UWP动态编译,因为UWP运行时环境不会允许您动态加载程序集。 –