2

史前史:

我有一个简单的 ASP.NET MVC3 应用程序。在项目文件中,我打开了构建 MVC 的视图:

<MvcBuildViews>True</MvcBuildViews>

我也使用实体框架 4.0。我已经在System.Data.Entity我的 Web 项目中添加了对程序集的引用。(是的,我知道在 UI 中使用数据访问层不好,它只是为了测试)。在项目文件中,它看起来:

<Reference Include="System.Data.Entity" />

然后我尝试在我的视图(Razor 引擎)中使用 ObjectContext 类,但我收到了错误消息:

errorCS0012: The type 'System.Data.Objects.ObjectContext' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

在我的另一个项目文件中,我看到 System.Data.Entity 被其他引用:

<Reference Include="System.Data.Entity" >
    <Private>True</Private>
</Reference>

接下来,我使用<Private>True</Private>子元素更改了项目文件(参考部分),问题已经解决。

那么,什么是<Private>True</Private>以及它如何影响构建过程?

4

3 回答 3

2

Private=True 将程序集复制到网站的“bin”文件夹中,它们会自动成为网站引用的程序集字典的一部分。

但是您不想将框架程序集复制到 bin 文件夹中。只需将以下内容添加到位于“~/Views”文件夹中的 web.config 中:

    <system.web>
    <compilation>
        <!--add assembly references needed for MvcBuildViews build task-->
        <assemblies>
            <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        </assemblies>
    </compilation>

如果存在不需要指定完整版本 4.0.0.0.0 的语法,我很乐意收到通知。

于 2012-08-21T15:38:42.823 回答
1

MvcBuildViews 正在使用 msbuild 编译您的视图。Visual Studio 和 msbuild 之间似乎存在一些差异。

<Private>True</Private>与从视觉工作室复制本地相同。

于 2012-06-15T16:15:15.893 回答
0

实际上这个解决方案对我有用

  • 在解决方案资源管理器中,右键单击引用并从右键单击菜单中选择添加引用。

  • 显示参考管理器对话框。

  • 如果尚未选择 System.Data.Entity,请从对话框的列表中选择。确保选中项目旁边的复选框。

  • 单击确定。
于 2016-08-03T16:45:54.760 回答