ReactiveUI - 类型 'IScheduler' 在未引用的程序集中定义
ReactiveUI - The type 'IScheduler' is defined in an assembly that is not referenced
我正在尝试子class ReactiveList 以便它响应我编写的 ReactiveDictionary 中的更改,而不是父列表。
这是 ReactiveList subclass 的 class 和构造函数签名。
public class ReactiveDictionaryDerivedList<TKey, TValue, TDerived> : ReactiveList<TDerived>, IReactiveDerivedList<TDerived>
{
public ReactiveDictionaryDerivedList(
IReadOnlyReactiveDictionary<TKey, TValue> dict,
Func<TValue, TDerived> selector,
Func<TValue, TDerived, bool> derivedValueFinder,
IScheduler scheduler)
{
}
这是我在项目中的依赖项。请注意,我使用的是 System.Reactive 的 4.0.0 预览版,因为它是由 ReactiveUI 8.0.0 alpha 安装的。 (我正在使用 ReactiveUI alpha,因为这似乎是 what is recommended these days)
<packages>
<package id="ReactiveUI" version="8.0.0-alpha0113" targetFramework="net452" />
<package id="ReactiveUI.WPF" version="8.0.0-alpha0113" targetFramework="net452" />
<package id="Splat" version="2.0.0" targetFramework="net452" />
<package id="System.Reactive" version="4.0.0-preview00001" targetFramework="net452" />
</packages>
问题是 class 由于错误而无法编译:
error CS0012: The type 'IScheduler' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Reactive.Interfaces, Version=3.0.1000.0,
Culture=neutral, PublicKeyToken=94bc3704cddfc263'.
任何解决方法的想法都将不胜感激。关于 ReactiveUI 和 System.Reactive 的推荐版本的建议也很好。
不幸的是,目前依赖性发生了一些可疑的事情。但对于当前的 8.0 版本,建议安装 System.Reactive 3.1。这是唯一经过测试的 8.0 版本。
如果您开始为您的项目使用 PackageReference,您将不需要自己定义 System.Reactive 依赖项,但包管理器会选择它。但这可能不适用于 WPF。
参见:https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files
在我的 WPF 应用程序中,我必须安装版本为 4.0.0-preview00001 的 System.Reactive.XXXXX 包(Core、Interfaces、Linq、PlatformServices、Windows.Threading、Windows.Forms)。
所有这些包都带有 System.Reactive.Compatibility
包 (nuget link):
Reactive Extensions (Rx) Compatibility Library for enabling v3 apps to
work with v4
您应该尝试在您的项目中使用它。
我正在尝试子class ReactiveList 以便它响应我编写的 ReactiveDictionary 中的更改,而不是父列表。
这是 ReactiveList subclass 的 class 和构造函数签名。
public class ReactiveDictionaryDerivedList<TKey, TValue, TDerived> : ReactiveList<TDerived>, IReactiveDerivedList<TDerived>
{
public ReactiveDictionaryDerivedList(
IReadOnlyReactiveDictionary<TKey, TValue> dict,
Func<TValue, TDerived> selector,
Func<TValue, TDerived, bool> derivedValueFinder,
IScheduler scheduler)
{
}
这是我在项目中的依赖项。请注意,我使用的是 System.Reactive 的 4.0.0 预览版,因为它是由 ReactiveUI 8.0.0 alpha 安装的。 (我正在使用 ReactiveUI alpha,因为这似乎是 what is recommended these days)
<packages>
<package id="ReactiveUI" version="8.0.0-alpha0113" targetFramework="net452" />
<package id="ReactiveUI.WPF" version="8.0.0-alpha0113" targetFramework="net452" />
<package id="Splat" version="2.0.0" targetFramework="net452" />
<package id="System.Reactive" version="4.0.0-preview00001" targetFramework="net452" />
</packages>
问题是 class 由于错误而无法编译:
error CS0012: The type 'IScheduler' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Reactive.Interfaces, Version=3.0.1000.0,
Culture=neutral, PublicKeyToken=94bc3704cddfc263'.
任何解决方法的想法都将不胜感激。关于 ReactiveUI 和 System.Reactive 的推荐版本的建议也很好。
不幸的是,目前依赖性发生了一些可疑的事情。但对于当前的 8.0 版本,建议安装 System.Reactive 3.1。这是唯一经过测试的 8.0 版本。
如果您开始为您的项目使用 PackageReference,您将不需要自己定义 System.Reactive 依赖项,但包管理器会选择它。但这可能不适用于 WPF。
参见:https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files
在我的 WPF 应用程序中,我必须安装版本为 4.0.0-preview00001 的 System.Reactive.XXXXX 包(Core、Interfaces、Linq、PlatformServices、Windows.Threading、Windows.Forms)。
所有这些包都带有 System.Reactive.Compatibility
包 (nuget link):
Reactive Extensions (Rx) Compatibility Library for enabling v3 apps to work with v4
您应该尝试在您的项目中使用它。