在web.config中添加程序集引用

时间:2011-01-26 16:59:00

标签: asp.net web-config

我有一些关于web.config的一般性问题以及它如何与程序集引用有关。我一直在使用新的Razor视图引擎,并且在启动和运行时遇到了一些麻烦。

我的问题始于一般

  

类型或命名空间名称'XXXXX'   在命名空间中不存在   'XXXXX'(你错过了一个集会吗?   引用?)

现在我认为这只是一个简单的项目添加参考,我将继续前进。但即使我添加了对缺失组件的引用,我的项目也一直在破碎。

我找到了解决方案,我不得不在web.config中添加一个程序集引用。一旦我这样做,一切正常。

首先,我想了解为什么要添加对web.config的引用来修复此问题。为什么项目参考不够好?

第二次,在web.config中添加引用时,我想了解语法。当我看到像这样的标记时

<add assembly="System.Web.WebPages" />

我似乎很清楚我正在添加一个名为System.Web.WebPages的程序集。但是我的web.config中的完整语法是

<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

版本似乎是自解释的,但是文化和PublicKeyToken用于什么?他们需要吗?如果我不知道其中任何一个会发生什么,我可以把任何东西放进去吗?

3 个答案:

答案 0 :(得分:8)

回答第一个问题:

这里有另一个问题,有一个有用的答案:

What is difference between web.config assemblies element and project file Reference element

基本上,它与Visual Studio中的Web项目和非Web项目之间的差异有关(据我所知)。

回答第二个问题:

这需要花费很多时间,但是你走了:

文化 - 大多数程序集应该是文化中立的(假设这是在应用程序中设置的)。但是,如果您确实有文化敏感程序集,那么您可以在此处指定程序集的文化。

PublicKeyToken - 这是用于对程序集进行签名的公钥/私钥对的公钥。通过这种方式,.NET可以验证它正在加载的程序集是否正确。

这里有更多有用的信息:

http://en.wikipedia.org/wiki/.NET_assembly

答案 1 :(得分:3)

一个老问题,已经回答了,但我偶然发现并希望补充:

公钥标记的重要性在于它对于强名称程序集是绝对必需的。事实上,这就是你获得PKT的方式:签署程序集(生成一个强名称密钥)。如果没有签名,您就无法在GAC中存储程序集。

因此,这不仅仅是识别程序集的问题......它是.NET验证程序集签名并确保它没有被篡改的加密方式。

答案 2 :(得分:2)

每个人似乎都在给予&#39; run-around&#39;有了这个答案。很简单:

<configuration>
    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
            <assemblies>
                <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            </assemblies>
        </compilation>
    </system.web>
</configuration>