gpt4 book ai didi

c# - 将 supportedRuntime 嵌入到 exe 文件中

转载 作者:可可西里 更新时间:2023-11-01 08:28:51 25 4
gpt4 key购买 nike

我需要将仅包含受支持的运行时设置的 app.config 文件嵌入到我的 exe 文件中。我尝试执行构建操作嵌入式资源,但它现在不从配置文件中读取值并且它不起作用。这是我的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
<supportedRuntime version="v4.0"/>
</startup>
</configuration>

所以我的想法是在 .Net 4.0 上也运行我的 .Net 2.0 exe。有任何想法吗?

谢谢。

最佳答案

这是不可能的。如果您绝对必须拥有不带配置文件的可执行文件,最接近的方法是编写将为您运行 CLR 的非托管加载程序。

假设您有如下 C# 应用:

using System;

namespace DumpVersion
{
class Program
{
static int EntryPoint(string argument)
{
Console.Out.WriteLine(argument);
Console.Out.WriteLine(Environment.Version);
Console.In.ReadLine();
return 0;
}

static void Main()
{
EntryPoint("Main");
}
}
}

您可以像这样创建非托管 ( ) 加载器:

#include <metahost.h>

#pragma comment(lib, "mscoree.lib")

#import "mscorlib.tlb" raw_interfaces_only \
high_property_prefixes("_get","_put","_putref") \
rename("ReportEvent", "InteropServices_ReportEvent")

int wmain(int argc, wchar_t* argv[])
{
HRESULT hr;
ICLRMetaHost *pMetaHost = NULL;
ICLRRuntimeInfo *pRuntimeInfo = NULL;
ICLRRuntimeHost *pClrRuntimeHost = NULL;

// build runtime
// todo: add checks for invalid hr
hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&pMetaHost));
hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
if (hr != S_OK) {
hr = pMetaHost->GetRuntime(L"v2.0.50727", IID_PPV_ARGS(&pRuntimeInfo));
}
hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost,
IID_PPV_ARGS(&pClrRuntimeHost));

// start runtime
hr = pClrRuntimeHost->Start();

// execute managed assembly
DWORD pReturnValue;
hr = pClrRuntimeHost->ExecuteInDefaultAppDomain(
L"c:\\temp\\TestLoading\\DumpVersion\\bin\\Debug\\DumpVersion.exe",
L"DumpVersion.Program",
L"EntryPoint",
L"hello .net runtime",
&pReturnValue);

// free resources
pMetaHost->Release();
pRuntimeInfo->Release();
pClrRuntimeHost->Release();

return 0;
}

更多信息:https://www.codeproject.com/Articles/607352/Injecting-Net-Assemblies-Into-Unmanaged-Processes

关于c# - 将 supportedRuntime 嵌入到 exe 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24270489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com