在.NET项目中引用程序集。奇怪的行为

时间:2012-06-15 15:49:52

标签: .net asp.net-mvc-3 entity-framework entity-framework-4 .net-assembly

史前:

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

<MvcBuildViews>True</MvcBuildViews>

我也使用Entity Framework 4.0。我已将System.Data.Entity程序集的引用添加到我的Web项目中。 (是的,我知道在UI中使用数据访问层并不好,它仅用于测试)。 在项目文件中,它看起来是:

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

然后我尝试在我的View(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>以及它如何影响构建过程?

3 个答案:

答案 0 :(得分: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的语法,我将很高兴收到通知。

答案 1 :(得分:1)

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

<Private>True</Private>与从visual studio复制本地相同。

答案 2 :(得分:0)

实际上this solution为我工作

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

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

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

  •   
  • 单击“确定”。
  •