我目前正在使用 Windows Sandbox,但似乎无法运行 .NET 应用程序。尽管 Sandbox 安装了 .NET 4.8,但当我尝试运行下载的 .NET 桌面应用程序时,它抱怨运行时不可用。
尝试安装特定的运行时(4.7.2 是我下载的内容)会出现上述错误。
那么有没有办法在沙箱上运行 .NET 应用程序呢?
如果我没记错的话,ASP.NET Core 项目是设置 HTTP Server 的 .NET Core 控制台应用程序。它有一个Program
带有方法的类Main
。所有指定的 ASP.NET Core 命名空间和类型都通过 NuGet 包(在 SDK 中引用)进行分发Microsoft.NET.Sdk.Web
。
我的逻辑告诉我“为了运行 ASP.NET Core 应用程序,你只能使用 .NET Core 运行时”,但是......
在dotnet 下载运行时网站中,有 .NET Core 运行时和 ASP.NET Core 运行时的下载。
在 DockerHub 中,有一个.NET 运行时的镜像和一个ASP.NET Core 运行时的镜像。
当我跑步时dotnet --list-runtimes
,我看到:
两个运行时有什么区别?我可以使用 .NET Core 运行时而不使用 ASP.NET Core 运行时运行 ASP.NET 应用程序吗?在否定的情况下,为什么需要为 ASP.NET Core 指定运行时?我不需要指定的运行时来运行 Monogame 项目。
我在 Internet 的帮助下编写了一些本机 C++ 代码,该代码加载 .NET 运行时并调用具有签名的方法:public static int MethodNameHere(String pwzArgument)
来自托管程序集中的类。
但是,我似乎无法使用 Visual Studio 将代码编译为本机 DLL(64 位),因为CLRCreateInstance()似乎存在链接问题,即使我包含"MetaHost.h"
在 .cpp 源文件中。
这是完整的代码:
#include "MetaHost.h"
extern "C" {
__declspec(dllexport) DWORD __stdcall CallManagedMethod(LPCWSTR managedDLLPath, LPCWSTR classPathInAssembly, LPCWSTR methodName, LPCWSTR parameter) {
// Bind to the CLR runtime..
ICLRMetaHost* pMetaHost = nullptr;
CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*) &pMetaHost);
ICLRRuntimeInfo* pRuntimeInfo = nullptr;
pMetaHost->GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID*) &pRuntimeInfo);
ICLRRuntimeHost* pClrRuntimeHost = nullptr;
pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*) &pClrRuntimeHost);
pClrRuntimeHost->Start();
// Okay, the CLR is up …
Run Code Online (Sandbox Code Playgroud)