问题标签 [corert]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
13149 浏览

.net - .NET CoreCLR、CoreRT、Roslyn 和 LLILC 有什么区别

最近我开始阅读有关 .NET 重组的详细信息(主要通过.NET Core github pages)。他们似乎创建了兄弟项目来支持更多平台。在阅读时,我的印象是CoreCLRCoreRT是专有Roslyn编译器的新开源版本。CoreRT 提供本机 (AOT) 编译。LLILC指导 LLVM 框架的替代实现。

任何人都可以从用户的角度确认和描述这个项目的差异和目标吗?为什么将来有人会使用 Roslyn 而不是 CoreCLR?

0 投票
2 回答
6781 浏览

c# - 使用 CoreRT / 另一个 AOT 编译 .net 核心应用程序

我正在 ASP.NET CORE 1.0 上构建一个 REST API。在生产中,恕我直言,不使用 JIT 非常有用,因为带有应用程序的 docker 容器正在向上和向下扩展,在 CI 期间一遍又一遍地重新部署,因此每个已部署容器的即时编译会导致可怕的滞后,LB健康检查死亡和其他痛苦。

正如我所读到的,使用 dotnet CLI 的本机编译已停止。我尝试使用CoreRT构建,但没有运气(由于复杂性,需要详细说明)。

由于这个问题非常抽象,我没有提供示例代码或详细信息,所以一开始只有几个问题:

  1. 我的假设是否正确 - 提前编译是否会解决每个路径首次执行缓慢的问题 - 或者 - 是否还有其他解决方案?
  2. 如果是真的,目前是否可以从 .NET Core 构建“本机”应用程序(ubuntu x64 目标)?
  3. 如果是,最好的做法是什么——我该怎么做?有没有人有这方面的经验?

(目标平台将是 ubuntu-14.04-x64 docker 映像以及编译平台。出于开发目的,在 OSX 上编译也很好。)

先感谢您。

0 投票
1 回答
514 浏览

c# - 如何使用本机 corert 预览进行构建?

我尝试使用corert ilc 编译器和 microsoft 链接器构建一个针对 win-x86 的 .NET core 2.0 控制台应用程序。

到目前为止,我下载了最新版本的 corert 库,并使用提交 c7781a90f00645f6bd06ef57e5d3fd879fe3e9a0 时的发布目标成功构建了预览。

我添加了构建脚本 rd.xml、ilc.rsp 和 link.rsp,但我不断收到来自 ilc 的消息:

更新:我能够解决架构问题,但现在由于缺少文件引用而失败:

更新 2:我能够通过查找所有丢失文件的引用来解决问题,但最后我意识到我需要将架构目标切换到 x64,但是现在它在链接器上失败了:

0 投票
1 回答
252 浏览

.net-core - 为什么 CoreRT 编译的程序无法处理 ZIP 文件?

我写了以下简单的程序来测试:

根据这个页面,我dotnet new nuget从 HelloZip 项目目录运行,在 nuget.config 中添加了推荐的包源,然后运行以下命令:

我收到以下错误:

我犯了一个错误,还是 AOT 编译器还没有正确支持 System.IO.Compression?

0 投票
1 回答
3317 浏览

.net-core - C# 通过 Visual Studio 2019 将 .NET Core 3.0 编译为 Native Code

我正在使用带有 C# 8.0 的 Visual Studio 2019,我的项目基于此示例:https ://github.com/dotnet/corert/tree/master/samples/HelloWorld

当我打开命令提示符并在我的解决方案文件夹中导航时,我使用以下命令编译本机代码:

dotnet 发布 -c 发布 -r win-x64

这很好用。

但是,在 Visual Studio 2019 中编译/构建(而不是使用 cmd)不会生成本机代码。在输出窗口中没有“生成本机代码”步骤。

这是我的 .csproj

0 投票
2 回答
1205 浏览

c# - 使用 CoreRT 和 Dapper 编译 .Net Core 控制台应用程序

我正在尝试使用CoreRT将我的代码(.net 核心控制台应用程序)编译为 win-x64 的本机 .exe 。我能够一直关注文档,直到与反射有关的部分和使用 rd.xml 文件,这是我目前卡住的地方。

我的项目使用Dapper作为 ORM,它依赖于反射来绑定数据库中的对象。我只绑定了 2 种不同的类型,所以我的假设是我需要在 rd.xml 中包含这些类型。

现在,当我尝试dotnet publish -r win-x64 -c release从 .net 核心 cli 运行时,它成功完成,但是在运行时,我编译的 .exe 会引发异常,并带有以下代码段:

--->(内部异常 #0)System.TypeInitializationException:类型初始化程序引发了异常。要确定哪种类型,请检查 InnerException 的 StackTrace 属性。---> EETypeRva:0x01202268(System.Reflection.MissingRuntimeArtifactException):无法调用此对象,因为它已启用元数据以供浏览:'Dapper.SqlMapper.TypeHandlerCache<System.Data.DataTable>.SetHandler(Dapper.SqlMapper. ITypeHandler)'有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=616867

我的 rd.xml 文件如下所示:

我假设我需要在此处包含对我的模型的引用,这将是Fooand Bar,但是抛出的错误专门针对 Dapper。

rd.xml 文件位于我的项目目录中,并在 MyProject.csproj 中被引用,如下所示:

<ItemGroup> <EmbeddedResource Include="rd.xml" /> </ItemGroup>

我想知道这个问题是由于我的结构(也许应该以不同的方式引用 rd.xml),还是由于我的 rd.xml 文件的内容。有没有人处理过这个问题,或者在使用 Dapper 的项目中使用过 CoreRT?

0 投票
0 回答
251 浏览

.net-core - 使用 Npgsql 和 CoreRT 编译 .Net Core 控制台应用程序

我正在尝试使用 coreRT 和 Npgsql将 .net 核心控制台应用程序编译为 ubuntu 18.04 docker 容器上的本机可执行文件(linux-x64)。我目前正在使用 docker-compose 来设置数据库和应用程序容器。

码头工人-compose.yml

Dockerfile

当它开始编译它时(dotnet publish -r linux-x64 -c Release -v detailed -o outside),它进入无限循环,消耗容器的所有可用内存。直到它显示此错误:

它似乎与 F# 中泛型和反射的使用有关。我已经查看了NpgsqlcoreRT 存储库,但找不到可以让它们都工作的人。有没有人遇到过这个问题?还是设法使用 Npgsql 和 coreRT?

0 投票
1 回答
3429 浏览

c# - .NET Core 可以用来构建原生 Linux 二进制文件吗?

抱歉,如果这个问题看起来很基本,但我做了一些谷歌搜索并找不到明确的答案(也许我不知道正确的关键字)。

.NET Core 能否用于从 C#/F# 源构建本机命令行 Linux 二进制文件?(我知道单声道)

0 投票
0 回答
439 浏览

visual-studio - 调试 UWP .NET 应用程序:MyApp.exe 中 0x79A1CFAC (SharedLibrary.dll) 处未处理的异常:0x00001007

我已经构建了一个 Xamarin.Forms 应用程序,当我尝试在Debug|AnyCPU模式下调试其 UWP 前端时,我在启动时收到此异常:

Visual Studio 不允许我将所有细节复制到剪贴板,所以我不得不截屏:

Visual Studio for Windows 在调试时遇到崩溃

如果我在Debug|x64模式下运行它,我会得到一个完全不同的异常:

MyApp.exe 中 0x00007FFFEA232EC0 (Windows.UI.Xaml.dll) 处的未处理异常:0xC000027B:发生应用程序内部异常(参数:0x000002225D634960、0x0000000000000002)。

而这一次 CallStack 面板是空的。

我不知道如何解决这个问题。

0 投票
1 回答
252 浏览

c# - 使用没有 Assembly.Load 或类似的 P/invoke 调用托管 C# 库

我已经找了好几天了,但我发现的只是如何使用 P/Invoke 从 C# 调用非托管库。我需要以不同的方式做:我希望使用 P/Invoke 从另一个调用托管程序集(或使用其他东西,避免调用Assembly.Load,Assembly.LoadFrom等),主要是由于 CoreRT/NativeAOT 限制(参见此处) .

基本上,使用 CoreRT/NativeAOT 的想法是由于原生可执行文件的生成,这将提高我的应用程序的安全性,因为常见的反编译器无法使用它(除了 IDA 和具有 ASM 知识的聪明开发人员,但他们更难过来)。考虑到 CoreRT/NativeAOT 不能(它可以,但 .NET 团队现在不想......)使用任何 .NET 互操作方法(Assembly.LoadAssembly.LoadFrom等)加载外部程序集,但它可以使用DllImport,我'想调用一个外部程序集,如果不使用任何这些程序集加载方法,它是否被反编译,我并不在意。

是的,我知道我可以用 CoreRT 本身编写一个包装器或其他东西来生成一个本机库,并从应用程序中使用 P/Invoke 调用它,但是对于由于 而无法编译的实体框架Reflection.Emit,这是不可能的。

这里的理想解决方案是知道如何在不使用 Assembly.Load/LoadFrom/LoadFromStream/etc 的情况下从另一个 C# 应用程序/程序集调用任何 .NET 程序集 (DLL)。使用其他方法,可以是 P/Invoke(可以吗?)或其他方法。