VS2012中的“添加引用”和* .csproj文件

时间:2012-08-19 02:40:48

标签: .net clr

我的理解是,如果我使用“Add refenrce”将一些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 failed to keep consistent DLL version in *.csproj file and assembly manifest, a VS2012 bug?

更新

在上面,我说我从参考列表中删除了它们,但项目甚至不会构建。这不是真的。

我删除了程序集清单中未提及的DLL引用,该项目仍然构建良好。 这些信息也会从* .csproj文件中删除。

所以我认为我们可以在项目中添加一些不必要的引用,这些信息进入* .csproj文件。但如果编译器认为引用是不必要的,它将 NOT 进入程序集清单。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

像Resharper这样的工具可以帮助您删除它们。