2016-02-08 10 views
8

私はWPFとWindows 10で使用するライブラリを開発しています。後者でコンパイルする際に問題が発生しています。これはnet46の罰金コンパイルしている間(伝統的な.NET Frameworkのある).NETコアライブラリでWindowsランタイムクラスを使用するには?

project.json

{ 
    "frameworks": { 
     "net46": { 
      "frameworkAssemblies": { 
       "WindowsBase": "4.0.0.0" 
      } 
     }, 
     "netcore50": { 
      "dependencies": { 
       "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0" 
      } 
     } 
    } 
} 

Dependency.cs

using System; 
using System.Collections.Generic; 
#if NET46 
using System.Windows; // .NET Framework 4.6 
#elif NETCORE50 
using Windows.UI.Xaml; // Windows 10 apps 
#endif 

public static class Dependency 
{ 
    public static DependencyProperty Register<T, TOwner>(string name, PropertyChangedCallback<T, TOwner> callback) 
     where TOwner : DependencyObject 
    { 
     // Code here.... 
    } 
} 

:ここでは、コードの一部であります、私はnetcore50(これはWindows 10のアプリケーションで使用できます)で動作するようになっています。なんらかの理由で、DependencyPropertyDependencyObjectのようなタイプはその設定に含まれていないようです。

これらのタイプを含むnetcore50互換のNuGetパッケージがありますか?私のライブラリから使用できますか?

ありがとうございます。


EDIT:私はちょうどVSでDependencyPropertyで入力し、F12を押してください。そのタイプはWindows.Foundation.UniversalApiContractアセンブリにありますが、NuGetにはこのようなパッケージはありません。

+0

WPFのようなものはクロスプラットフォームのafaikには向いていませんが、興味があればPerspexのようなプロジェクトを見ることができます。 – Warty

+0

@Warty .NET Coreは、プラットフォームに依存しないライブラリを作成できるだけでなく、*作成することも可能です。例えば'Microsoft.Win32.Registry'のようなパッケージを使うことができます。 –

答えて

5

最後に私自身の問題です!

.NET Core GitHub repoには、System.Runtime.WindowsRuntimeのような一連のWinRT固有のライブラリがあったことを思い出しました。そこで、私は彼らがどのようにそれをしたかを見るためにそこに向かった。

Windows.winmdファイル(Windowsランタイムのすべてのタイプを保持)を含む内部でホストされている何らかの種類の内部で使用されているようです("targeting pack")。残念ながら、このパッケージは.NET Coreチーム専用の専用NuGetフィードでホストされているため、使用できません。

CoreFXレポhereでこれについて問題が発生しました。この問題の公式な解決策としてMicrosoftに申し立てることができます。その間に、私は自分の手に問題を持ってきました。私はWindows.winmdのすべての異なるバージョンを私のラップトップに見つけて、それらをNuGetパッケージとしてアップロードしました。ここではそれらは:あなたがこのようにそれらを使用することができます

:その後

"frameworks": { 
    ".NETPortable,Version=v4.5,Profile=Profile32": { 
     "dependencies": { 
      "Target.WindowsRuntime": "8.1.2" 
     } 
    } 
} 

を、あなたが何かを書くことができるようになりますこのように:

using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 

public class MyApp : Application 
{ 
    public MyApp() 
    { 
     var button = new Button(); 
     button.Content = "Hello, world!"; 
    } 
} 

それだけでうまくいくでしょう。

0

WPF私の知る限り、.NET CoreやW10 Universal Appsと互換性がありません。コンソールアプリケーションとWebアプリケーションは現在、.netコアと互換性がありますが、新しいコードベースを新しいプロジェクトシステムですが、 をコンパイルするために.netコアを削除する必要があります。もしあなたが待っていなければならないデスクトップアプリケーションを持つlinuxで.netコアを使用したい場合は、互換性のあるウィンドウアプリケーションフレームワークを使用しますいずれもまだ利用可能です)、ElectronまたはCordovaなどのhtml/jsのクロスプラットフォームフレームワークベースを使用することができます(このアプリケーションでは、Cordovaでデスクトップアプリケーションフレームワークがあるかどうかはわかりません)

+0

私が知る限り、Perspexは現在のところ、.NET Core UIの唯一のライブラリです。 –

+0

残念ながら、私はこれが本当だとは思わない。 .NET Coreは**すべてのプラットフォームで実行できる何かを書くことについては**ありません。それはPCLのことです。代わりに、** project.json **で指定した各構成ごとに1回コンパイルされます。これにより、コード内で '#if NET46'のようなことを行い、各プラットフォーム用にコードを特化することができます。 –

関連する問題