首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用什么参数调用coreclr_initialize?

用什么参数调用coreclr_initialize?
EN

Stack Overflow用户
提问于 2021-11-02 21:15:49
回答 1查看 272关注 0票数 0

我正在调用C:\ProgramFiles\dotnet\shared\Microsoft.NETCore.App\5.0.11\中的coreclr_initialize in coreclr.dll

除了在硬编码路径中使用最高版本之外,我不知道是否有找到最佳coreclr.dll的官方方法,但这似乎有效(如果是32位进程,则使用Program (x86) )。

代码语言:javascript
复制
private static class Native
{
    [DllImport("coreclr.dll", CallingConvention=CallingConvention.Cdecl)]
    public static extern int coreclr_initialize(
        [MarshalAs(UnmanagedType.LPStr)] string exePath,
        [MarshalAs(UnmanagedType.LPStr)] string appDomainFriendlyName,
        int propertyCount,
        [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)] string[] propertyKeys,
        [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)] string[] propertyValues,
        out IntPtr hostHandle,
        out uint domainId);
}

示例代码将"TRUSTED_PLATFORM_ASSEMBLIES“显示为唯一的propertyKey,其中包含一个分号分隔的受信任程序集列表。但是,我不知道在哪里可以找到其他有效的参数可以传递。特别是,我不知道如何设置AppDomain.CurrentDomain.BaseDirectory。它总是显示为空白,并且似乎不受我对exePath的定义的影响。是否还有可以设置的其他属性,以及应该设置的属性?

与此相关的是,我无法让System.Data.SqlClient自动加载sni.dll,即使我将Kernel32.SetDllDirectory()调用到sni.dll所在的目录。构建包喜欢将其放入“runtimes x64\本机”中。我不知道DllImport在.NET 5中如何找到本机dll时是否有不同的行为,所以如果我能够获得.NET的BaseDirectory正确的话,它会自动加载它?如果没有,我可以手动调用LoadLibrary("sni.dll")来解决这个问题,但是由于各种原因,正确地获得BaseDirectory集似乎很重要。

我想这里有两个我认为相关的问题:可以设置哪些属性,以及如何设置BaseDirectory?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-03 14:28:28

汉斯·帕桑特分享的链接:

代码语言:javascript
复制
const pal::char_t *PropertyNameMapping[] =
    {
        _X("TRUSTED_PLATFORM_ASSEMBLIES"),
        _X("NATIVE_DLL_SEARCH_DIRECTORIES"),
        _X("PLATFORM_RESOURCE_ROOTS"),
        _X("APP_CONTEXT_BASE_DIRECTORY"),
        _X("APP_CONTEXT_DEPS_FILES"),
        _X("FX_DEPS_FILE"),
        _X("PROBING_DIRECTORIES"),
        _X("STARTUP_HOOKS"),
        _X("APP_PATHS"),
        _X("RUNTIME_IDENTIFIER"),
        _X("BUNDLE_PROBE"),
        _X("HOSTPOLICY_EMBEDDED"),
        _X("PINVOKE_OVERRIDE")
    };

我在实验上证实了以下几点:

APP_CONTEXT_BASE_DIRECTORY用于设置AppDomain.CurrentDomain.BaseDirectory。NATIVE_DLL_SEARCH_DIRECTORIES用于控制它从何处加载P/Invoke dll。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69817006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档