2016-05-09 15 views
3
    このように見えるように project.jsonを変更し、新たな Class Library (Package)プロジェクト
  • (追加したプロジェクトの依存関係)作成した

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

その結果、私は無知に終わる検索をいくつか行いました。

私はそうのような私project.jsonでdnx451 {}に依存関係を追加しようとしました:私はどこかにこのようなソリューションを読んだ覚えて、それがうまくいかなかったので

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

私は、実際の問題に何らかの役に立つ解決策を見つけることができませんが、それは一般的な問題のように見えます。バージョン14.0.25123.00アップデート2

  • の.NET Framework 4.6 - 現在

    • Visual Studioのコミュニティ2015を使用して

      。01055

    • ASP.NET MVCどのCOMライブラリによって引き起こされているように見えるのxUnit DNXユニットテストプロジェクトテンプレートのための6インストール
    • SideWaffle
    • ビジュアルC#2015

    UPDATE

    私はVS CMDラインからこのツールを使ってインポートしました:Tlbimp.exe (Type Library Importer)

    要するに、AcoSDK.dllは上記のツールを使用してインポートしたCOMライブラリで、すべてのCOMタイプが.NETタイプとして解決された.NETアセンブリを作成します。

    次に、NuGet.exeを使用して、自分のプライベートフィードで公開したパッケージを作成しました。

    そして、自分のプロジェクトのパッケージを"Acomba.SDK": "2.0.0"と私のproject.jsonで参照しました。

    このパッケージのDateTimeプロパティを使用すると、ビルドエラーが発生します。

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

    そして、これはしません:たとえば、これはエラーが発生する原因となる.NETのDateTimeのため

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

    COM型が日付です。しかし、それは、tlbimp.exeコマンドラインで提供されている例の手順に従って、DateTimeと見なされるはずです。

    DNXCORE50でDateTimeがサポートされていないことがわかったプロパティにドットを追加したときだけです。それは、 'new DateTime()'(see screenshot here)のようなネイティブのDateTimeの場合を除きます。

    これを回避する方法についての手掛かりはありますか? GitHubの上で報告されたこの問題を1として

  • +0

    なぜあなたはこれをやっていますか?コアCLR/CoreFxのターゲット設定は、LinuxやOSX上でコードを実行するのに便利です。そのCOMコンポーネントは決してできません。 –

    +0

    @HansPassant:どうしてですか?つまり、.NETのインポートされた型アセンブリでラップされ、NuGetパッケージとして公開され、次に適切な互換性パッケージを使用して参照されると、このCOMが他のOSで動作するのを防ぐことができますか?加えて、私はまだここで私の学習曲線です。 =) –

    答えて

    1

    Accessing mscorelib in DNX Core 5.0 #989、コアCLRがうまくのMscorlib.dllを参照してくださいCOMの種類をサポートしていないようです。

    さらに、この問題を回避するためのパッケージがあります: Microsoft.NETCore.Portable.Compatibilityです。

    要するに、COMオブジェクトなどのmscorlib.dllを参照する型を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" 
        } 
        } 
    } 
    

    をし、問題の詳細を知るために私は、より詳細な情報をカバーするので、提供されたリンクに従うことを強くお勧めします。

    最後に、問題を解決しました! =)

    関連する問題