簡體   English   中英

“DateTime”類型是在未引用的程序集中定義的?

[英]The type 'DateTime' is defined in an assembly that is not referenced?

  • 創建了一個新的Class Library (Package)項目
  • 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"
                }
             }
         }
     }
  • 編譯解決方案,我收到此錯誤:

“DateTime”類型在未引用的程序集中定義。 您必須添加對程序集'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已安裝
  • Sidewaffle for Xunit DNX單元測試項目模板
  • Visual C#2015

UPDATE

它似乎是由我從VS CMD行使用此工具導入的COM庫引起的: Tlbimp.exe (Type Library Importer)

簡而言之,AcoSDK.dll是一個COM庫,我使用上述工具導入它來創建一個.NET程序集,所有的COM類型都解析為.NET類型。

然后,我使用NuGet.exe創建一個包,我通過我的私人訂閱源發布。

然后,我在我的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 ,似乎Core 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"
    }
  }
}

有關此軟件包的更多詳細信息,以及有關該問題的更多信息,我強烈建議您按照提供的鏈接進行操作,因為它們涵蓋了更深入的信息。

最后,它解決了這個問題! =)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM