Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

.NET 4.x Support #101

Closed
longlongago-k opened this issue Feb 10, 2019 · 8 comments
Closed

.NET 4.x Support #101

longlongago-k opened this issue Feb 10, 2019 · 8 comments

Comments

@longlongago-k
Copy link

現在ReactivePropertyは.Net4.x環境にて、nugetで.Net Standard版 ReactiveProperty(≧5.0.0)を導入するとdll hell(dll大量発生)が起こり、System.Windows.Interactivity.dllが引き連れるLocalizationファイルも併せてdllが120個以上インストールされます。
これを回避するためにReactiveProperty(4.2.2)をインストールするとRxの依存関係が不完全で一部パッケージが足りないためにdll not foundで起動できなくなります。この点は足りないパッケージを個別に導入すると何とか解決できますが、入門ユーザは.Net 4.x 環境ではdll hellを受け入れて最新版を導入する選択肢しかありません。

@soi013
Copy link
Contributor

soi013 commented Feb 12, 2019

DLLたくさん問題

私の環境では問題が発生しませんでした。

  • .NET Framework 4.7.2
  • ReactiveProperty 5.3.2
  • System.Reactive 4.1.2
  • WPF
  • VisualStudio 2017

で実験してみましたが、サブフォルダ含めてもdllは18個しかインストールされませんでした。
詳しい環境を教えてもらえると解決につながるかもしれません。

ReactiveProperty(4.2.2)実行できない問題

先にRx(System.Reactive)の3.1.1をインストールしてから、ReactiveProperty4.2.2をインストールすることで解決します。
ちなみに.NET Framework 4.6以前はこの方法を取る必要があります。

@runceel
Copy link
Owner

runceel commented Feb 19, 2019

DLL たくさん問題

そうですね。こちらの DLL 大量問題については @soi013 さんの PullRequest #96 で改善されました。

ReactiveProperty(4.2.2)実行できない問題

こちらは把握していませんでしたが、nuspec の定義が何かまずい感じですかね??

@runceel
Copy link
Owner

runceel commented Feb 19, 2019

余談ですが DLL HELL の本来の意味はこちら。久しぶりに、その単語を聞きました。

https://ja.wikipedia.org/wiki/DLL地獄

@soi013
Copy link
Contributor

soi013 commented Feb 19, 2019

こちらは把握していませんでしたが、nuspec の定義が何かまずい感じですかね??

https://www.nuget.org/packages/ReactiveProperty/4.2.2
nugetのRxのDependenciesが 'System.Reactive (>= 3.1.1) 'になっているので、
Rxがインストールされていない状態でReactivePropertyをインストールすると自動でRxの最新版がインストールされます。
nuspecのDependenciesを変更すれば直ると思います。

直接nugetファイルを編集した方が早いですかね。

@runceel
Copy link
Owner

runceel commented Mar 1, 2019

これをベースに nuspec 書き換えてバージョン番号を 4.2.3 あたりにして公開って感じですかねぇ。

https://github.com/runceel/ReactiveProperty/tree/v4.2.2

@Ktouth
Copy link

Ktouth commented Mar 1, 2019

検証はしていませんが、 NETStandard.Library の dependencies をチェックしてみた限りは NetStandard 2.0 環境において System.ObjectModel と System.Reflection.Extensions は必要なさそうに見えます。

https://www.nuget.org/packages/NETStandard.Library/

ReactiveProperty(5.3.2) の nuspec から この二つの依存を削除するという事は出来ませんか?

@runceel
Copy link
Owner

runceel commented May 22, 2019

暫く動きがないのでクローズします。
.NET 4.6 以前をお使いの場合は @soi013 さんの回避策で対応してください。

@runceel runceel closed this as completed May 22, 2019
@diontools
Copy link

この問題は .NET Standard 2.0 に起因する、ファサードアセンブリ問題だと思います。これは .NET Framework 4.7.1 で解決済みです。公式 Blog公式 Issue
4.6.1 から 4.7 までは .NET Standard 2.0 をサポートしておらず、大量のファサードアセンブリをコンパイラーが生成することで(半ば無理やり)対応していました。
ただ 4.7.1 にも問題があるようで4.7.2 を使用することを推奨しています。

NuGet では .NET Framework 4.6.1 が .NET Standard 1.5 から 2.0 をサポートすると見なしますが、.NET Framework 4.6.1 プロジェクトのそれらのバージョンでビルドされた .NET Standard ライブラリを使用する際にいくつかの問題が発生します。そのようなライブラリを使用する必要がある .NET Framework プロジェクトでは、.NET Framework 4.7.2 以降を対象とするプロジェクトにアップグレードすることをお勧めします。

結論としては .NET Framework 4.6 以前の古いバージョンか 4.7.1 以降を使用するの2択になります。それ以外では DLL 祭りが始まるでしょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants