.csproj的特定于平台的ItemGroup适用于程序集引用但不包含内容?

时间:2010-12-17 12:08:55

标签: .net assemblies cpu-architecture

由于我们有三个显式x86和x64版本的程序集,因此我编辑了要使用的相应.csproj文件,例如,这样的块:

  <ItemGroup Condition=" '$(Platform)' == 'x86' ">
    <Reference Include="CaliberRMSDK">
      <HintPath>..\Libraries\CaliberRMSDK_IKVM\32bit\CaliberRMSDK.dll</HintPath>
    </Reference>
    <Content Include="..\Libraries\CaliberRMSDK_IKVM\32bit\ikvm-native.dll">
      <Link>ikvm-native.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="..\Libraries\CaliberRMSDK_IKVM\32bit\JVM.dll">
      <Link>JVM.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup Condition=" '$(Platform)' == 'x64' ">
    <Reference Include="CaliberRMSDK">
      <HintPath>..\Libraries\CaliberRMSDK_IKVM\64bit\CaliberRMSDK.dll</HintPath>
    </Reference>
    <Content Include="..\Libraries\CaliberRMSDK_IKVM\64bit\ikvm-native.dll">
      <Link>ikvm-native.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="..\Libraries\CaliberRMSDK_IKVM\64bit\JVM.dll">
      <Link>JVM.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

在Visual Studio 2010中重新加载.csproj文件并使用“x86”作为平台时,所有工作都完美无缺。当选择'x64'作为平台时,使用正确的64位汇编参考链接的(<Content Include= ...> ..)总是使用32位的(因此应用程序坏了。)

在项目文件中已经没有任何CPU了,我会“期望”它对内容包含的工作也很好......但事实并非如此。有什么我想念的吗?

3 个答案:

答案 0 :(得分:1)

我们将Condition属性放在Reference元素上,并且工作正常。也许Condition属性也需要添加到Content元素中? (你真的需要Reference元素和Content元素吗?)例如:

<Reference Include="SomeLib" Condition="$(Platform)=='x86'">
  <HintPath>..\..\ThirdParty\SomeLib\clr4\x86\SomeLib.dll</HintPath>
  <Private>False</Private>
</Reference>
<Reference Include="SomeLib" Condition="$(Platform)=='x64' Or $(Platform)=='AnyCPU'">
  <HintPath>..\..\ThirdParty\SomeLib\clr4\x64\SomeLib.dll</HintPath>
</Reference>

答案 1 :(得分:0)

这个问题已经回答了吗?如果没有,我建议切换ItemGroups的顺序,看看是否实现了相反的结果(它在x64中工作,但在x86上Visual Studio显示错误的引用)。

答案 2 :(得分:0)

所以这只是'只是'视觉/显示问题。在底层构建中使用正确的引用等,只有VS2010显示错误的引用。一切都好,只是不可见。