【问题标题】:CoreCLR, 'Type' does not contain a definition for 'GetTypeFromProgID'CoreCLR,“类型”不包含“GetTypeFromProgID”的定义
【发布时间】:2016-09-15 01:02:18
【问题描述】:

我正在尝试将 Web 应用程序从 dnx451 升级到 dotnetcoreapp1.0。

这个应用程序需要使用一个旧的库(至少我认为它是一个库)。这个 sn-p 曾经与 DNX 一起工作,但现在我已经升级了。

//COMPILE ERROR: 'Type' does not contain a definition for 'GetTypeFromProgID'
var comType = Type.GetTypeFromProgID("ABCCrypto2.Crypto"); 

var abc = Activator.CreateInstance(comType);

var license = _config["AbcCrypto:License"];
var password = _config["AbcCrypto:Password"];

comType.InvokeMember("License", System.Reflection.BindingFlags.SetProperty, null, abc, new object[] { license });
comType.InvokeMember("Password", System.Reflection.BindingFlags.SetProperty, null, abc, new object[] { password });

var hashed = comType.InvokeMember("Encrypt", System.Reflection.BindingFlags.InvokeMethod, null, abc, new object[] { data });

有什么想法或解决方法吗?谢谢!

编辑:

上面的代码位于一个类库中,与引用它的 ASP.NET Core Web 应用程序分开。这是类库的 project.json:

"buildOptions": {
    "emitEntryPoint": false
},
"dependencies": {
    "MyApp.Data": "1.0.0-*",
    "System.Net.Mail": "1.0.0-rtm-00002",
    "System.Runtime": "4.1.0"
},
"frameworks": {
    "netcoreapp1.0": { }
}

这是 ASP.NET Core Web 应用程序的 project.json:

"buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
},
"dependencies": {
    "MyApp.Services": "1.0.0-*",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Authorization": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Hosting": "1.0.0",
    "Microsoft.AspNetCore.Hosting.Abstractions": "1.0.0",
    "Microsoft.AspNetCore.Http.Extensions": "1.0.0",
    "Microsoft.AspNetCore.Localization": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Routing": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.AspNetCore.Session": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.Extensions.Caching.SqlServer": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0"
},
"frameworks": {
    "netcoreapp1.0": {
        "dependencies": {
            "Microsoft.NETCore.App": {
                "type": "platform",
                "version": "1.0.0"
            }
        }
    }
},
"runtimes": {
    "win10-x86": {}
}

【问题讨论】:

  • 您要求更多“核心”。没有人喜欢在手机上运行注册表清理程序。或者Linux。当您依赖于只能在 Windows 安装上运行的组件时,使用 .NETCore 根本没有任何意义。只针对 .NET 的完整版本,它总是在这样的机器上可用。
  • @HansPassant 我将我的框架更改为 net461,这似乎解决了这个错误。感谢您的帮助。

标签: c# dnx coreclr


【解决方案1】:

如果您将"System.Runtime": "4.1.0" 添加到 project.json 文件的依赖项部分,则存在Type.GetTypeFromProgID

如果您想检查某些 api 是否存在以及它存在的位置,请使用apisof.net

无论如何,正如 Hans 所写,也许你根本不应该针对 net core..

【讨论】:

  • 我添加了 "System.Runtime": "4.1.0" 但它没有修复错误。不过感谢您的建议。
  • @johnluke 你能给我看看 project.json 文件吗?恢复命令成功了吗?我刚刚尝试了新的 coreapp 项目,它可以工作。
  • 我添加了 project.json 文件。 dotnet restore 适用于类库和核心 Web 应用程序。但是,我仍然收到相同的原始错误。
  • 我发布了一个答案。感谢您的帮助 Dudi。
【解决方案2】:

我将我的框架更改为 net461,它工作正常。而且我仍然可以使用 AspNetCore 包:

"frameworks": {
    "net461": {}
}

但是,我现在遇到了与加载 COM 库有关的问题,但我认为这是一个单独的错误,所以我将发布一个新问题。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多