C# INotifyPropertyChanged,使用MVVMLight 5.0的ASP.NET站点中的System.ObjectModel错误

C# INotifyPropertyChanged,使用MVVMLight 5.0的ASP.NET站点中的System.ObjectModel错误,c#,asp.net,mvvm-light,C#,Asp.net,Mvvm Light,我刚刚尝试将一个ASP.NET 4.5站点更新为使用5.0.2,该站点是针对MVVMLight(4.4.32.1 nuget软件包)的5.0之前版本运行的 现在,在VisualStudio中一切都编译得很好,但我在第一页视图中遇到了一个错误。基本上是这样的: CS0012:类型“System.ComponentModel.INotifyPropertyChanged”为 在未引用的程序集中定义。您必须添加一个 引用程序集'System.ObjectModel,版本=4.0.0.0, 区域性=中性

我刚刚尝试将一个ASP.NET 4.5站点更新为使用5.0.2,该站点是针对MVVMLight(4.4.32.1 nuget软件包)的5.0之前版本运行的

现在,在VisualStudio中一切都编译得很好,但我在第一页视图中遇到了一个错误。基本上是这样的:

CS0012:类型“System.ComponentModel.INotifyPropertyChanged”为 在未引用的程序集中定义。您必须添加一个 引用程序集'System.ObjectModel,版本=4.0.0.0, 区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'

它发生在汇编我的一个观点时:

public class _Page_Views_Account_Development_cshtml : 
             MyNamespace.Web.Views.BaseView<IEnumerable<MyNamespace.Data.Models.User>> {
项目层次结构基本上是:

  • “Web”引用“核心”和“数据”
  • “数据”引用“核心”
  • 所有三个项目都引用MVVMLight 5.0“仅库”nuget包
这三个项目都以.NETFramework 4.5.2为目标

有趣的是,
System.ObjectModel
似乎并不存在/工作。当我试图通过VisualStudio添加引用时,它没有列在“程序集”或“扩展”选项卡中。我可以在引用程序集的Facades文件夹中找到它,但该程序集只包含一系列内容的
TypeForwardedTo
程序集属性(包括
INotifyPropertyChanged
)。此外,添加Facades assembly作为对我的项目的引用并不能消除错误


有什么想法吗?

我找到了答案。ASP.NET处理可移植类库的方式与其他程序集稍有不同。由于MVVMLight 5.0将所有“仅库”nuget软件包都切换为PCL,这使我了解了ASP.NET处理PCL的不同方式,而这以前不是问题

我猜有“编译时”(当您点击内置VS时)和“运行时编译时”(当您运行ASP.NET应用程序并第一次编译视图时)。问题在于后者

为了修复它,您需要在web.config中添加引用,如下所示:

 <compilation>
      <assemblies>
        ...
        <add assembly="System.ObjectModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        ...
      </assemblies>
    </compilation>

...
...

然后它将在网页编译时可用。

这不适用于我的WPF应用程序(app.config)。我也有同样的问题。另外,为什么要将MVVM与ASP.NET一起使用?我不得不问一下,我不认为上述内容适用于WPF应用程序——这里的问题是ASP.NET的运行时部分。我猜你的问题完全不同。为了回答您的第二个问题,模型位于WPF和ASP.NET都使用的共享库中,并且模型继承了INotifyPropertyChanged。不过,它实际上并没有在ASP.NET应用程序中使用。然而,它已经被重构,不再使用它。
 <compilation>
      <assemblies>
        ...
        <add assembly="System.ObjectModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        ...
      </assemblies>
    </compilation>