1

我的理解是,如果我使用“添加引用”向我的项目添加一些 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 文件。但是如果编译器认为引用是不必要的,它将不会进入程序集清单。

谢谢!

4

1 回答 1

0

未在代码中实际使用的程序集或项目引用(即“存储在 *.csproj 中”作为 Reference 或 ProjectReference)不包含在生成的程序集中。这是一种标准行为。

Resharper 等一些工具可以帮助您删除它们。

于 2013-02-19T14:39:39.953 回答