【问题标题】:Differences between assembly references程序集引用之间的差异
【发布时间】:2012-12-04 13:18:41
【问题描述】:

在某些机器上,在 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>

这是为什么?

【问题讨论】:

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


    【解决方案1】:

    从 msdn 中提取:

    处理器体系结构添加到 .NET 中的程序集标识 框架版本 2.0,允许特定于处理器的版本 组件。您可以创建其身份的程序集版本 仅因处理器架构而异,例如 32 位和 64 位 特定于处理器的版本。不需要处理器架构 对于强名称。有关详细信息,请参阅 装配名称处理器架构。在本例中,完全 限定名称表示 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

    【讨论】:

    • 不客气 :)。如果有用,您可以接受答案吗?谢谢
    • 在程序集中请求类型的代码必须使用完全限定的程序集名称。这称为完全限定绑定。在 .NET Framework 中引用程序集时,不允许使用仅指定程序集名称的部分绑定。但在我的示例中,可以看到允许
    • 您是否在请求具有反射的类型?
    • 无反射请求类型
    【解决方案2】:

    这些行不能帮助您的应用程序找到正确的引用或创建完全限定的程序集名称,这些行有助于 Visual Studio 找到引用。可能只有当 VS 在识别要加载哪个 dll 时出现问题时,您才会发现这些行。

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

    【讨论】:

      【解决方案3】:

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

      通过这种方式,编译器知道您的项目中准确地引用了哪个程序集。

      【讨论】:

        猜你喜欢
        • 2010-12-16
        • 1970-01-01
        • 2016-06-04
        • 2016-09-05
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多