程序集引用之间的差异

时间:2012-12-04 13:18:42

标签: c# .net visual-studio-2010 visual-studio-2012

在csproj中添加对程序集的引用后,在某些机器上生成了下一个标记。

<Reference Include="Microsoft.Expression.Interactions">
  <HintPath>..\Libs.SL\Blend\Microsoft.Expression.Interactions.dll</HintPath>
</Reference>

但是在某些机器上生成了带有版本,文化,令牌和处理器架构的引用:

 <Reference Include="Microsoft.Expression.Interactions, Version=5.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\Libs.SL\Blend\Microsoft.Expression.Interactions.dll</HintPath>
</Reference>

这是为什么?

3 个答案:

答案 0 :(得分:1)

从msdn提取:

  

处理器体系结构被添加到.NET中的程序集标识中   Framework 2.0版,允许特定于处理器的版本   组件。您可以创建其标识的程序集的版本   不同之处仅在于处理器架构,例如32位和64位   特定于处理器的版本。不需要处理器架构   强大的名字。有关更多信息,请参阅   AssemblyNameProcessorArchitecture。在此示例中,完全   限定名称表示myTypes程序集具有强名称   使用公钥令牌,具有美国英语的文化价值,并具有   版本号为1.0.1234.0。它的处理器架构是“msil”,   这意味着它将是即时(JIT)编译为32位代码   或64位代码,具体取决于操作系统和处理器。

     

请求程序集中的类型的代码必须使用完全限定的代码   装配名称。这称为完全限定绑定。局部   绑定时,不允许指定程序集名称   引用.NET Framework中的程序集。

     

对构成.NET Framework的程序集的所有程序集引用   还必须包含程序集的完全限定名称。例如,   引用版本1.0的System.Data .NET Framework程序集   包括:

在源代码中查看更多内容:

http://msdn.microsoft.com/en-us/library/k8xx4k69.aspx

答案 1 :(得分:1)

这些行无法帮助您的应用程序找到正确的引用或创建完全限定的程序集名称,这些行有助于Visual Studio查找引用。可能只有在VS确定要加载哪个dll时才会找到这些行。

我知道,这不是您期望的答案:)但我希望它可以帮助您进行搜索。

答案 2 :(得分:0)

我不是100%肯定,但根据.NET Assemblies通常的行为模型,在第二种情况下,您会获得引用程序集的详细描述(完全限定名称)是机器上组件的多个版本。

通过这种方式,编译器可以知道项目中引用了哪个 程序集。