【问题标题】:Running .NET Standard binaries on different frameworks在不同的框架上运行 .NET Standard 二进制文件
【发布时间】:2018-02-16 07:33:13
【问题描述】:

我了解以 .NET Standard 2 为目标意味着 .net core、mono 和完整 .net 框架之间的框架,但我想了解这对于不同框架创建的二进制文件意味着什么。

所以如果我创建一个面向 .NET Standard 2 的控制台程序并使用 .NET Framework 进行编译,是否只能使用完整的 .NET Framework 运行此文件?如果他们都可以运行文件,我将如何使用完整框架或 Mono 运行 .NET Core .dll 可执行控制台?

那么基本上每个框架(针对 .NET Standard)创建的二进制文件能够使用其他框架运行吗?

【问题讨论】:

  • 不能创建 .NET Standard 控制台程序。它仅适用于图书馆。可执行文件必须以运行时为目标。可执行文件是指控制台应用程序、网站单元测试类库。这些可执行文件可以引用相同的 .NET Standard 库
  • @PanagiotisKanavos 哇,我什至从未考虑过 - 没有看到任何关于 classlib 和可执行文件之间差异的信息。到目前为止,我能看到的最接近的信息是 github.com/dotnet/corefx/issues/18217#issuecomment-293394403,其中一些答案很有趣,但很奇怪,在解释 .net 标准时并没有详细说明(我至少在任何地方都没有看到这个)
  • 实际上,您可以创建一个 .NET Standard 控制台应用程序,但它不会运行,因为 .NET Standard 没有运行时。这意味着你必须挠头,直到你弄清楚你做错了什么。
  • @NightOwl888 问题是我发现能够将 exe 编译为 .net 标准是很合乎逻辑的,但必须使用运行时显式运行它,例如:dotnet exec.dll 但使用 . net 标准不会抱怨,但它不会运行。如果你问我会感到困惑。也表明它可能会在未来被允许或计划在某个阶段(我之前链接到的问题)
  • @MladenMihajlovic - 不,这是不可能的。 dotnet 应用程序在 .NET Core 上运行。它加载的程序集必须在 .NET Core 上可执行 - 它必须以 .NET Core 为目标(并且可以依赖于 .NET Standard DLL)。您还可以为具有.exe 文件且不需要dotnet.exe 运行的.NET Core 创建Self-contained deployment

标签: .net .net-core .net-standard


【解决方案1】:

我相信Comparison to Portable Class Libraries 部分可能说得最好:

.NET Standard 是 Portable Class Libraries (PCL) 的替代品。

.NET Standard 本身并不是一个运行时,它是一种用于多个不同运行时的类型转发机制。因此,在 .NET Standard 中只能创建一个非可执行类库,就像 PCL 一样。

这使类库能够被面向特定运行时(.NET Framework、.NET Core、Xamarin.iOS、Mono 等)的可执行程序集使用。

从类和接口的角度来考虑这一点很有帮助。在伪代码中,.NET Standard 是 .NET Framework 和 .NET Core 实现的接口。

public interface INetStandard
{
    // Only has API definitions
}

public class NetFramework : INetStandard
{
    // .NET Framework Runtime implemented here
}

public class NetCore : INetStandard
{
    // .NET Core Runtime implemented here
}

这使得 .NET Standard 可以与 .NET Framework 或 .NET Core 一起使用,但 .NET Standard 本身没有运行时,只有一组可以在运行时之间共享的 API。您可以在您的项目中定位这三个中的任何一个,但是您不能执行 .NET Standard,就像您不能实例化一个接口一样。

很遗憾,您不是第一个提出此问题的人,除非 Microsoft 更清楚地说明 .NET Standard 并未实际执行,否则您可能不会是最后一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多