我的理解是,如果我使用“添加引用”向我的项目添加一些 DLL,这些引用信息将存储在 *.csproj 文件中,如下所示,并且应该在编译后存储在程序集清单中。
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=11.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
这些信息应该反映在程序集元数据清单中,可以使用 ILDasm.exe 检查。
但我注意到一些引用的 DLL 仅显示在 *.csproj 文件中,而不显示在程序集清单中。
如:
在 *.csproj 中,我有:
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=11.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Microsoft.VisualStudio.QualityTools.CodedUITestFramework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=11.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Microsoft.VisualStudio.TestTools.UITest.Common.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=11.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Microsoft.VisualStudio.TestTools.UITest.Extension.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=11.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Microsoft.VisualStudio.TestTools.UITesting.dll</HintPath>
</Reference>
但在汇编清单中,我只看到这个:
.assembly extern Microsoft.VisualStudio.TestTools.UITesting
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 11:0:0:0
}
.assembly extern Microsoft.VisualStudio.TestTools.UITest.Extension
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 11:0:0:0
}
由于我没有在清单中看到某些程序集,因此我将它们从参考列表中删除,但该项目甚至不会构建。
我对 .NET CLR 有什么误解吗?
这里还有一个相关的线程可能是相关的: VS2012 未能在 *.csproj 文件和程序集清单中保持一致的 DLL 版本,VS2012 错误?
更新
在上面,我说我从参考列表中删除了它们,但项目甚至不会构建。这不是真的。
我删除了程序集清单中未提及的 DLL 引用,该项目仍然构建良好。这些信息也会从 *.csproj 文件中删除。
所以我认为我们可以在项目中放置一些不必要的引用,这些信息将进入 *.csproj 文件。但是如果编译器认为引用是不必要的,它将不会进入程序集清单。
谢谢!