c# - 类型 'DateTime' 是在未引用的程序集中定义的?

标签 c# .net visual-studio-2015 dnx

  • 创建了一个新的类库(包)项目
  • project.json 更改为如下所示(添加了项目依赖项):

project.json

    { 
         "version": "1.0.0-*",
         "description": "WMI.ECM.PCMS.Services.Acomba Class Library",
         "authors": [ "WILL" ],
         "tags": [ "" ],
         "projectUrl": "",
         "licenseUrl": "",

         "dependencies": {
           "Acomba.SDK": "2.0.0",
           "WMI.ECM.Inventory.Models": "",
           "WMI.ECM.Inventory.Services": "",
           "WMI.ECM.Inventory.Services.Contracts": ""
      },

         "frameworks": {
             "dnx451": { },
             "dnxcore50": {
                "dependencies": {
                  "Microsoft.CSharp": "4.0.1-beta-23516",
                  "System.Collections": "4.0.11-beta-23516",
                  "System.Linq": "4.0.1-beta-23516",
                  "System.Runtime": "4.0.21-beta-23516",
                  "System.Threading": "4.0.11-beta-23516"
                }
             }
         }
     }
  • 编译解决方案,但出现此错误:

The type 'DateTime' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PunlicKeyToken=b77a5c561934e089'.

  • 然而,我的其他项目也没有这个问题,这些项目也以 DNX451 和 DNXCORE50 为目标。我还应该提到 mscorlib.dll 实际上在这个屏幕截图中的问题项目中被引用:Referenced assemblies .

因此,我进行了一些搜索,但最终一无所获。

我尝试将依赖项添加到我的 project.json 中的 dnx451{},如下所示:

"dnx451": {
  "dependencies": {
    "Microsoft.CSharp": "",
    "System.Runtime": ""
    ...
  }
}

因为我记得在某处读过这样的解决方案,但它没有用。

虽然我找不到对实际问题有帮助的解决方案,但它看起来像是一个常见问题。

正在使用

  • Visual Studio Community 2015 - 版本 14.0.25123.00 更新 2
  • .NET Framework 4.6.01055
  • 已安装 ASP.NET MVC 6
  • Xunit DNX 单元测试项目模板的 SideWaffle
  • 视觉 C# 2015

更新

这似乎是由我使用此工具从 VS CMD 行导入的 COM 库引起的:Tlbimp.exe (Type Library Importer) .

简而言之,AcoSDK.dll 是我使用上述工具导入的 COM 库,用于创建一个 .NET 程序集,其中所有 COM 类型都解析为 .NET 类型。

然后,我使用了NuGet.exe创建一个我通过我的私有(private)提要发布的包。

然后,我在我的 project.json 中将项目中的包引用为 "Acomba.SDK": "2.0.0"

每当我使用此包中的 DateTime 属性时,都会发生构建错误。例如,这会导致错误发生:

public DateTime CreatedAt { get { return p.PrTimeModified; } }

这不是:

public DateTime CreatedAt { get { return new DateTime(); } }

.NET DateTime 的 COM 类型是 Date。但是,按照 tlbimp.exe 命令行上提供的示例中的步骤,它应该被视为 DateTime。

只有当我在属性中添加一个点时,我才看到 DNXCORE50 不支持 DateTime。除了它用于原生 DateTime,例如“new DateTime()”(see screenshot here)。

关于如何解决这个问题的任何线索?

最佳答案

根据 GitHub 上报告的这个问题: Accessing mscorelib in DNX Core 5.0 #989 ,似乎核心 CLR 不能很好地支持引用 mscorlib.dll 的 COM 类型。

此外,还有一个软件包可用于解决此问题,它是: Microsoft.NETCore.Portable.Compatibility .

简而言之,它所做的只是将引用 mscorlib.dll 的类型(例如 COM 对象)重新映射到较新版本的 System.Runtime 和其他库,后者又引用其相应的 DLL 以获得正确的版本左右.

所以解决方案是在project.json中添加这个包如下:

project.json

"frameworks": {
  "dnx451": { },
  "dnxcore50": {
    "dependencies": {
      "Microsoft.CSharp": "4.0.1-beta-23516",
      "Microsoft.NETCore.Portable.Compatibility": "1.0.1-beta-23516",
      "System.Collections": "4.0.11-beta-23516",
      "System.Linq": "4.0.1-beta-23516",
      "System.Runtime": "4.0.21-beta-23516",
      "System.Threading" :  "4.0.11-beta-23516"
    }
  }
}

要了解有关此软件包的更多详细信息,并了解有关该问题的更多信息,我强烈建议点击提供的链接,因为它们涵盖了更深入的信息。

最终还是解决了问题! =)

关于c# - 类型 'DateTime' 是在未引用的程序集中定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37124796/

相关文章:

c# - Nancy 查看内部服务器错误

c# - 防止数据网格中的行更改

c++ - Visual Studio 2015 添加类,错误 : "object already exists"

git - 如何在 visual studio git 中显示文件夹的历史记录

C++:Visual Studio 2015 中未解析的外部符号 _sprintf 和 _sscanf

c# - BackgroundWorker 意外死亡

c# - 使用 LINQ 在 Varray 中添加值

.net - 为什么我无法在 .net Standard 2.0 库中使用 "SupportedOSPlatform"属性?

c# - switch 语句中的变量初始化问题

.net - MVVM 中的启动逻辑应该放在哪里?