2016-05-09 5 views
3
  • создал новый проект Class Library (Package)
  • изменивших project.json выглядеть следующим образом (добавлено зависимости проекта):

project.jsonТип «DateTime» определен в сборке, на которую не ссылаются?

{ 
     "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.

В результате я сделал несколько поисков, которые в конечном итоге не понятны.

Я пытался добавить зависимости к dnx451 {} в моем project.json так:

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

Потому что я помню, прочитав такое решение где-то, и это не сработало.

Это выглядит как общая проблема, хотя я не могу найти полезные решения актуальной проблемы.

В настоящее время с помощью

  • Visual Studio Community 2015 - Версия 14.0.25123.00 Update 2
  • .NET Framework 4.6.01055
  • ASP.NET MVC 6 Установленные
  • SideWaffle для XUnit DNX Test Unit Шаблон проекта
  • Visual C# 2015

UPDATE

Это, как представляется, быть вызвано библиотекой COM, которая Я импортировал этот инструмент из строки VS CMD: Tlbimp.exe (Type Library Importer).

Одним словом, AcoSDK.dll представляет собой библиотеку COM, которую я импортировал с использованием вышеупомянутого инструмента, чтобы создать сборку .NET со всеми типами COM, разрешенными как типы .NET.

Затем я использовал NuGet.exe, чтобы создать пакет, который я опубликовал через свой личный канал.

И тогда я назвал пакет в своем проекте "Acomba.SDK": "2.0.0" в моем project.json.

Всякий раз, когда я использую свойство DateTime из этого пакета, возникает ошибка сборки. Например, это приводит к возникновению ошибки:

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

И это не делает:

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

Тип COM для .NET DateTime Дата. Тем не менее, он должен рассматриваться как DateTime, следуя шагам в примерах, приведенных в командной строке tlbimp.exe.

Только когда я добавил точку в свойство, что увидел, что DateTime не поддерживается в DNXCORE50. За исключением того, что это для родного DateTime, такого как «new DateTime()» (see screenshot here).

Любые подсказки относительно того, как обходить это?

+0

Почему вы это делаете?Таргетинг CoreCLR/CoreFx полезен для запуска вашего кода на Linux или OSX. Этот компонент COM никогда не будет. –

+0

@ HansPassant: Почему бы и нет? Я имею в виду, однажды упакованный в сборку типа .NET импортированного типа, опубликованную как пакет NuGet, а затем ссылаясь на использование соответствующих пакетов совместимости, что помешало бы этому COM работать на другой ОС? Кроме того, я все еще нахожусь здесь на моей кривой обучения. знак равно –

ответ

1

По этому вопросу сообщил о GitHub: Accessing mscorelib in DNX Core 5.0 #989, кажется, что ядро ​​CLR не поддерживают также тип COM, которые относятся к mscorlib.dll.

Кроме того, существует пакет, доступный для обхода этой проблемы: 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" 
    } 
    } 
} 

Для большей информации об этом пакете, и узнать больше о проблеме , Я настоятельно рекомендую следить за предоставленными ссылками, поскольку они охватывают более подробную информацию.

В конце концов, это решило проблему! =)

 Смежные вопросы

  • Нет связанных вопросов^_^