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

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

史前时期:

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

<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>它如何影响构建过程?

最佳答案

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 的语法,我将很高兴获悉。

关于.net - 在 .NET 项目中引用程序集。奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054123/

相关文章:

c# - .NET 中的空数组是否使用任何空间?

asp.net-mvc-3 - 如何有效地从自相关表中加载数据

从 MVC 2 升级后,Asp.net MVC 3 无法与 Ninject 一起使用?

c# - include 中的动态查询过滤器表达式

entity-framework - 使用事务处理与 Entity Framework 集成测试的缺点

.net - MS Chart with ASP.NET chart type "column"如果图表中有超过 9 个条形,则不显示 x 轴标签

.net - 部署使用 Oracle.DataAccess 的 Web 服务器会导致各种程序集错误

c# - Nunit - 不发现测试 [无错误消息]

c# - 即使提供了显式值,HtmlHelper.TextBox 也会使用模型值

c# - 使用 GraphDiff 更新两个相关表中的数据