C# 程序集引用之间的差异

C# 程序集引用之间的差异,c#,.net,visual-studio-2010,visual-studio-2012,C#,.net,Visual Studio 2010,Visual Studio 2012,在某些机器上,在csproj中添加对程序集的引用后生成下一个标记 <Reference Include="Microsoft.Expression.Interactions"> <HintPath>..\Libs.SL\Blend\Microsoft.Expression.Interactions.dll</HintPath> </Reference> ..\Libs.SL\Blend\Microsoft.Expression.Intera

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

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

..\Libs.SL\Blend\Microsoft.Expression.Interactions.dll
但在某些机器上,生成了版本、区域性、令牌和处理器体系结构的引用:

 <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>

假的
..\Libs.SL\Blend\Microsoft.Expression.Interactions.dll
为什么会这样

从msdn中提取:

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


在程序集中请求类型的代码必须使用完全限定的 程序集名称。这称为完全限定绑定。部分的 仅指定程序集名称的绑定在以下情况下是不允许的: 在.NET Framework中引用程序集。

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

请参阅来源中的更多信息:


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


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

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


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

不客气:)。如果有用,你能接受答案吗?请求程序集中类型的ThanksCode必须使用完全限定的程序集名称。这称为完全限定绑定。在.NET Framework中引用程序集时,不允许仅指定程序集名称的部分绑定。但在我的示例中,可以看到PermitteYou可以请求具有反射的类型吗?没有请求具有反射的类型