问题标签 [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.
.net - .NET CoreCLR、CoreRT、Roslyn 和 LLILC 有什么区别
最近我开始阅读有关 .NET 重组的详细信息(主要通过.NET Core github pages)。他们似乎创建了兄弟项目来支持更多平台。在阅读时,我的印象是CoreCLR和CoreRT是专有Roslyn编译器的新开源版本。CoreRT 提供本机 (AOT) 编译。LLILC是指导 LLVM 框架的替代实现。
任何人都可以从用户的角度确认和描述这个项目的差异和目标吗?为什么将来有人会使用 Roslyn 而不是 CoreCLR?
c# - 使用 CoreRT / 另一个 AOT 编译 .net 核心应用程序
我正在 ASP.NET CORE 1.0 上构建一个 REST API。在生产中,恕我直言,不使用 JIT 非常有用,因为带有应用程序的 docker 容器正在向上和向下扩展,在 CI 期间一遍又一遍地重新部署,因此每个已部署容器的即时编译会导致可怕的滞后,LB健康检查死亡和其他痛苦。
正如我所读到的,使用 dotnet CLI 的本机编译已停止。我尝试使用CoreRT构建,但没有运气(由于复杂性,需要详细说明)。
由于这个问题非常抽象,我没有提供示例代码或详细信息,所以一开始只有几个问题:
- 我的假设是否正确 - 提前编译是否会解决每个路径首次执行缓慢的问题 - 或者 - 是否还有其他解决方案?
- 如果是真的,目前是否可以从 .NET Core 构建“本机”应用程序(ubuntu x64 目标)?
- 如果是,最好的做法是什么——我该怎么做?有没有人有这方面的经验?
(目标平台将是 ubuntu-14.04-x64 docker 映像以及编译平台。出于开发目的,在 OSX 上编译也很好。)
先感谢您。
c# - 如何使用本机 corert 预览进行构建?
我尝试使用corert ilc 编译器和 microsoft 链接器构建一个针对 win-x86 的 .NET core 2.0 控制台应用程序。
到目前为止,我下载了最新版本的 corert 库,并使用提交 c7781a90f00645f6bd06ef57e5d3fd879fe3e9a0 时的发布目标成功构建了预览。
我添加了构建脚本 rd.xml、ilc.rsp 和 link.rsp,但我不断收到来自 ilc 的消息:
更新:我能够解决架构问题,但现在由于缺少文件引用而失败:
更新 2:我能够通过查找所有丢失文件的引用来解决问题,但最后我意识到我需要将架构目标切换到 x64,但是现在它在链接器上失败了:
.net-core - 为什么 CoreRT 编译的程序无法处理 ZIP 文件?
我写了以下简单的程序来测试:
根据这个页面,我dotnet new nuget
从 HelloZip 项目目录运行,在 nuget.config 中添加了推荐的包源,然后运行以下命令:
我收到以下错误:
我犯了一个错误,还是 AOT 编译器还没有正确支持 System.IO.Compression?
.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
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 文件如下所示:
我假设我需要在此处包含对我的模型的引用,这将是Foo
and Bar
,但是抛出的错误专门针对 Dapper。
rd.xml 文件位于我的项目目录中,并在 MyProject.csproj 中被引用,如下所示:
<ItemGroup>
<EmbeddedResource Include="rd.xml" />
</ItemGroup>
我想知道这个问题是由于我的结构(也许应该以不同的方式引用 rd.xml),还是由于我的 rd.xml 文件的内容。有没有人处理过这个问题,或者在使用 Dapper 的项目中使用过 CoreRT?
.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# 中泛型和反射的使用有关。我已经查看了Npgsql和coreRT 存储库,但找不到可以让它们都工作的人。有没有人遇到过这个问题?还是设法使用 Npgsql 和 coreRT?
c# - .NET Core 可以用来构建原生 Linux 二进制文件吗?
抱歉,如果这个问题看起来很基本,但我做了一些谷歌搜索并找不到明确的答案(也许我不知道正确的关键字)。
.NET Core 能否用于从 C#/F# 源构建本机命令行 Linux 二进制文件?(我知道单声道)
visual-studio - 调试 UWP .NET 应用程序:MyApp.exe 中 0x79A1CFAC (SharedLibrary.dll) 处未处理的异常:0x00001007
我已经构建了一个 Xamarin.Forms 应用程序,当我尝试在Debug|AnyCPU
模式下调试其 UWP 前端时,我在启动时收到此异常:
Visual Studio 不允许我将所有细节复制到剪贴板,所以我不得不截屏:
如果我在Debug|x64
模式下运行它,我会得到一个完全不同的异常:
MyApp.exe 中 0x00007FFFEA232EC0 (Windows.UI.Xaml.dll) 处的未处理异常:0xC000027B:发生应用程序内部异常(参数:0x000002225D634960、0x0000000000000002)。
而这一次 CallStack 面板是空的。
我不知道如何解决这个问题。
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.Load
、Assembly.LoadFrom
等)加载外部程序集,但它可以使用DllImport
,我'想调用一个外部程序集,如果不使用任何这些程序集加载方法,它是否被反编译,我并不在意。
是的,我知道我可以用 CoreRT 本身编写一个包装器或其他东西来生成一个本机库,并从应用程序中使用 P/Invoke 调用它,但是对于由于 而无法编译的实体框架Reflection.Emit
,这是不可能的。
这里的理想解决方案是知道如何在不使用 Assembly.Load/LoadFrom/LoadFromStream/etc 的情况下从另一个 C# 应用程序/程序集调用任何 .NET 程序集 (DLL)。使用其他方法,可以是 P/Invoke(可以吗?)或其他方法。