c# - C# Roslyn 是否可以在 Android 上工作(使用 Xamarin)?
问题描述
我最近使用 Roslyn 在游戏应用程序的运行时编译和执行代码。感谢一些有用的资源,例如这个网站和Vendettamit answer,我设法在窗口 10 上的 C# Console Net Core 项目上编写了一个程序,该程序执行位于应用程序根目录下的 txt 文件中的代码。
using System;
namespace Test15
{
public class Program
{
public static int Main()
{
System.Console.WriteLine("Hello World from external Dll !");
System.Console.WriteLine("And it work !");
return 10;
}
}
}
我不打算分享代码,因为它与Vendettamit answer非常相似,并且该程序在窗口 10 上的 C# Console Net Core 项目上运行良好。
所以下一步,我尝试让这个程序在一个使用 Xamarin 的 Android 项目上与 C# Monogame 框架一起工作。
第一个问题:在尝试添加 Roslyn 似乎需要的块包“Microsoft.CodeAnalysis”时,出现以下 2 个错误:
Unable to resolve reference 'Humanizer', referenced by `Microsoft.CodeAnalysis.CSharp.Workspaces`.
Add NuGet package or assembly reference for 'Humanizer', or remove the reference to
'Microsoft.CodeAnalysis.CSharp.Workspaces'. Game2
Unable to resolve reference 'SQLitePCLRaw.core', referenced by `Microsoft.CodeAnalysis.Workspaces`.
Add NuGet package or assembly reference for 'SQLitePCLRaw.core', or remove the reference to
'Microsoft.CodeAnalysis.Workspaces'. Game2
(从法语翻译)
当用“microsoft.CodeAnalysis.CSharp”替换“Microsoft.CodeAnalysis”块包时,两个错误都消失了。
但是在运行时,添加 MetadataReference 不起作用。例如在我使用的控制台项目中:
MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location);
要将 MetadataReference 添加到 mscorlib.dll,但在 Android 项目中,它会崩溃,因为typeof(object).GetTypeInfo().Assembly.Location
return"mscorlib.dll"
而不是类似的东西"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.9\System.Private.CoreLib.dll"
,因为我猜我们在 Android 上。(与其他 MetadataReference 相同)
因此,在调用方法时CSharpCompilation.Create()
,“reference”参数是一个 null MetadataReference 数组,它会崩溃。
根据我阅读的内容,我认为(但我不确定)Roslyn 无法在 android 上工作,因为 System.Object 的位置缺失。
那么,如果有办法在 Android 上使用 Roslyn,有人可以确认(或无效)吗?
(如果您知道在任何设备上编译/执行或“解释” C# 代码的其他方式,则可以加分)
感谢阅读并保持安全。
解决方案
推荐阅读
- android - 我的应用程序在闲置一段时间后兑现
- javascript - Webpack - SyntaxError: Unexpected token {
- javascript - 如何在for循环内制作一个切换按钮以仅在单击的元素上激活
- python - 如何删除与列表元素相关的类型错误
- javascript - React 属性传播符号是否也传递给子代?
- kubernetes - 如何在 Kubernetes 集群上部署购物应用?
- ag-grid - 如何在通过 ag 网格中的导出上下文菜单导出时指定导出文件的默认文件名
- image - 按像素定位文本而不是对齐
- sapui5 - this.byId() 返回未定义
- java - 在 Spring Boot 中全局启用 CORS